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

标签 java character-encoding

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

为什么上面这行代码打印出12,不应该是打印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);
    ...

根据我的调试器,UTF_8$EncoderaverageBytesPerChar1.1,输入String11 个字符。 11 * 1.1 = 12.1,代码在计算时将总数转换为 int,因此 ByteBuffer 的结果大小为12.

关于java - 在 ByteBuffer 中编码的字符串的长度是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25941286/

相关文章:

java - ReplaceAll() 方法中的错误

Java语法解释——getMenuInflater()

javascript - 将unicode转为汉字

JAVA Files.readAllBytes() 不更改字符集

mysql - 在 mysql 命令行中设置名称 'charset_name' [COLLATE 'collation_name' ]

java - 如何为 Java 8 LocalDateTime 编写自定义序列化器

java - 如何在不卡住 Java Swing 中的 GUI 的情况下与进程随机通信?

java - 由于权限被拒绝,在hadoop.tmp.dir/tmp/hadoop-sha中创建临时目录时出错

java - 读取浏览器的POST请求内容到Java

mysql - 更改表默认字符集修改MySQL 5.6中的行