【问题标题】:Why does byteArray have a length of 22 instead of 20?为什么 byteArray 的长度是 22 而不是 20?
【发布时间】:2010-09-18 17:50:42
【问题描述】:

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

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

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

【问题讨论】:

    标签: java encoding string bytearray


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        Alexander's answer 解释了它存在的原因,但没有解释如何摆脱它。您只需在编码名称中指定所需的字节顺序:

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

        【讨论】:

          【解决方案4】:

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

          我认为您会在开头 (0xFEFF) 找到 byte order marker - 这允许任何消费(接收)字节数组的人识别编码是小端还是大端。

          【讨论】:

            猜你喜欢
            • 2022-07-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-08-17
            相关资源
            最近更新 更多