字节数以UTF-16字符串计数

时间:2013-11-22 17:48:23

标签: java character-encoding utf-16

为什么两个字符的UTF-16字符串在内存中只占用6个字节,而1个字符的UTF-16字符串占用4个字节?

以下是java中的SSCCE来演示此行为:

public class UTF16Test{
    public static void main(String[] args) throws Exception {
        System.out.println("A".getBytes("UTF-16").length);
        System.out.println("AB".getBytes("UTF-16").length);
    }
}

输出:

4
6

1 个答案:

答案 0 :(得分:5)

你必须考虑UTF-16的2字节Byte-Order-Marks吗?

您的前2个字节将是:FE FFFF FE,具体取决于您是使用Big还是Little end机器。你应该检查......

我做了,而且是[-2, -1, 0, 65, 0, 66]

您还应该考虑String值不会占用内存中的额外空间,只有当String编码为byte[]时才会添加字节顺序标记....字符串{{1在内存中使用AB,直到它被char[2]字节编码。