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

Java 为什么byteArray的长度是22而不是20?,java,encoding,string,bytearray,Java,Encoding,String,Bytearray,我们尝试使用以下Java代码将字符串转换为字节[]: String source = "0123456789"; byte[] byteArray = source.getBytes("UTF-16"); 我们得到一个长度为22字节的字节数组,我们不确定这个填充从何而来。 如何获得长度为20的数组?可能是前两个字节的长度。它指定了编码中使用的每个16位字的字节顺序。试着用十六进制打印字节,看看额外的2个字节添加到哪里-它们是在开始还是结束 我选择在开始时找到一个(0xFEFF)-这允许任何使用

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

String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16");
我们得到一个长度为22字节的字节数组,我们不确定这个填充从何而来。
如何获得长度为20的数组?

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

试着用十六进制打印字节,看看额外的2个字节添加到哪里-它们是在开始还是结束

我选择在开始时找到一个(0xFEFF)-这允许任何使用(接收)字节数组的人识别编码是小端还是大端。

解释了它存在的原因,但没有解释如何消除它。只需在编码名称中指定所需的endianness:

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

UTF在开头有一个字节顺序标记,它告诉我们这个流是以特定的格式编码的。正如其他用户指出的那样,
第一个字节是0XFE
第二个字节是0XFF
剩余字节为
0
48
0
49
0
50
0
51
0
52
0
53
0
54
0
55
0
56
0
57