ByteBuffer中编码的字符串的长度是多少

Ume*_*esh 8 java character-encoding

byte[] byteArray = Charset.forName("UTF-8").encode("hello world").array();
System.out.println(byteArray.length);
Run Code Online (Sandbox Code Playgroud)

为什么上面的代码行打印出12,不应该打印11代替?

azu*_*rog 11

数组的长度是ByteBuffer容量的大小,它是由您编码的字符数生成的,但不等于您编码的字符数.让我们来看看我们如何为ByteBuffer... 分配内存

如果您深入研究该encode()方法,您会发现它CharsetEncoder#encode(CharBuffer)看起来像这样:

public final ByteBuffer encode(CharBuffer in)
    throws CharacterCodingException
{
    int n = (int)(in.remaining() * averageBytesPerChar());
    ByteBuffer out = ByteBuffer.allocate(n);
    ...
Run Code Online (Sandbox Code Playgroud)

根据我的调试器,averageBytesPerChara UTF_8$Encoder1.1,输入String11字符. 11 * 1.1 = 12.1,并且代码int在计算时将总计转换为a ,因此得到的大小ByteBuffer为12.

  • 哇,我想知道是谁想出了这个平均值,以及他们使用了什么数据集.不知何故,它让我想起了一个关于统计学家的笑话,他把头伸进烤箱,双脚放在冰箱里,并宣称自己平均温暖舒适. (5认同)