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

我们尝试使用以下Java代码从string转换为Byte[]

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

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

亚历山大的答案解释了为什么在那里,但不是如何摆脱它。 您只需要在编码名称中指定所需的字节顺序:

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

可能是前两个字节是字节顺序标记 。 它指定编码中使用的每个16位字中的字节顺序。

尝试打印出hex字节,看看多余的2个字节添加在哪里 – 他们在开始或结束?

我select在开始时会发现一个字节顺序标记 (0xFEFF) – 这允许任何使用(接收)字节数组的人来识别编码是小端还是大端。

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