java - 将 byte[] 转换为 String,然后再转换回 byte[]

标签 java string bytearray

我在代理服务器上工作。我在 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/

相关文章:

java - 在 java 结构中模仿 C++ 并写入 byte[]

比较c中字节数组中的任意位序列

c++ - 无法正确 memcpy 一个 char 数组来构造

python - 将字节串转换为字节或字节数组

java - 使用 Apache flink 和 Spring boot 将 DataStream 类型的对象从 Controller 传递到 View 时出错

java - 如何改变java中算术运算符的优先级?

java - JMock - 添加期望的奇怪语法

PHP,在一个字符串中,如何将两个单词或多个单词放在括号中?

java - 解析并捕获字符串末尾的数字

string - 将 String 转换为 ByteString 的最佳方法是什么