我在代理服务器上工作。我在 byte[]
中获取数据,我将其转换为 String
以执行某些操作。现在,当我将这个新的 String
转换回 byte[]
时,它会导致未知问题。
所以主要是我需要知道如何正确地将 byte[]
转换为 String
然后再转换回 byte[]
再次。
我尝试将 byte[]
转换为 String
,然后再次返回 byte[]
(以确保它不是我的操作导致了问题)。
是这样的:
// where reply is a byte[]
String str= new String(reply,0, bytesRead);
streamToClient.write(str.getBytes(), 0, bytesRead);
不等同于
streamToClient.write(reply, 0, bytesRead);
当我只发送 byte[]
而不进行任何转换时,我的代理工作正常,但是当我将它从 byte[]
转换为 String
然后返回到 byte[]
它会导致问题。
有人可以帮忙吗? =]
最佳答案
转换 byte[]
的最佳方式至 String
然后回到 byte[]
根本不去做。
如果必须,您必须知道用于生成 byte[]
的编码,否则该操作使用平台默认编码,这可能会破坏数据,因为并非所有编码都可以对所有可能的字符串进行编码,并且并非所有可能的字节序列在所有编码中都是合法的。这就是您的情况。
至于如何找出编码,那要看:
- 如果您使用的是 HTTP,请查看 Content-Type header
- 如果您的数据是 XML,您应该使用 XML 解析器,它将为您处理编码
- 如果您的数据是 HTML 页面,可能还会有一个
<meta http-equiv>
标题
如果没有办法找出编码你有随机垃圾,而不是文本数据。
关于java - 将 byte[] 转换为 String,然后再转换回 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2758654/