转换字符串 - > byte [] - >字符串,而不是身份映射

时间:2015-03-18 10:38:54

标签: java string bytearray

当我将String转换为字节数组并返回String时,我不会得到我开始的结果。这是为什么?

String s1 = "" + (char)266;
String s2 = new String(s1.getBytes());
System.out.println(s1 + "|" + s2 + "|");
System.out.println((int)s1.charAt(0) + "|" + (int)s2.charAt(0));

输出:

?|?|
266 63

1 个答案:

答案 0 :(得分:1)

您似乎缺乏对charbyte之间关系的基本理解。

它们不可互换

当您有文本时,您有一个Unicode代码点流。碰巧在Java中,char用于此目的。但是对于解码和编码的过程,它们很可能是载体鸽。

所以,你有文字,你有字节。你需要做的是能够将这个文本,即这个载体鸽子序列(或char s,并不重要)转换为字节(即编码),然后字节回到文本(解码)。在Java中,这两个操作都可以通过一个名为Charset的类来获得;对于在幕后执行这些操作的类,这些是CharsetEncoderCharsetDecoder

因此你的程序无法正常工作。此外,当您使用:

someString.getBytes()

您将默认字符集用于JRE / OS组合不要这样做。在编码或解码时始终指定字符集。