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

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

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

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

mayaalpe asked 2020-02-22T19:14:45Z
4个解决方案
71 votes

亚历山大的答案解释了为什么存在它,但没有说明如何摆脱它。 您只需要在编码名称中指定所需的字节序即可:

String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16LE"); // Or UTF-16BE
Jon Skeet answered 2020-02-22T19:15:01Z
25 votes

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

Alexander answered 2020-02-22T19:15:21Z
7 votes

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

我选择的是,您会在开头(0xFEFF)处找到一个字节顺序标记-这使使用(接收)字节数组的任何人都可以识别编码是小尾数还是大尾数。

Bevan answered 2020-02-22T19:15:46Z
6 votes

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

anjanb answered 2020-02-22T19:17:44Z
translate from https://stackoverflow.com:/questions/228987/why-does-bytearray-have-a-length-of-22-instead-of-20