为什么byteArray的长度为22而不是20?

时间:2008-10-23 08:45:39

标签: java encoding string bytearray

我们尝试使用以下Java代码将字符串转换为Byte[]

String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16");

我们得到一个长度为22个字节的字节数组,我们不确定这个填充来自何处。 如何获得长度为20的数组?

4 个答案:

答案 0 :(得分:71)

Alexander's answer解释了为什么它存在,但不解释如何摆脱它。您只需在编码名称中指定所需的字节序:

String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16LE"); // Or UTF-16BE

答案 1 :(得分:25)

可能是前两个字节是Byte Order Mark。它指定了编码中使用的每个16位字的字节顺序。

答案 2 :(得分:7)

尝试打印出十六进制的字节,以查看添加额外2个字节的位置 - 它们是在开头还是结尾?

我选择你会在开始时找到byte order marker(0xFEFF) - 这允许任何消费(接收)字节数组的人识别编码是小端还是大端。< / p>

答案 3 :(得分:6)

UTF在开头有一个字节顺序标记,表示此流以特定格式编码。正如其他用户所指出的那样 第一个字节是0XFE
第二个字节是0XFF
剩下的字节是
0
48个
0
49个
0
50个
0
51个
0
52个
0
53个
0
54个
0
55个
0
56个
0
57个