Java 为什么byteArray的长度是22而不是20?
我们尝试使用以下Java代码将字符串转换为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)-这允许任何使用
字节[]
:
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