gpt4 book ai didi

java - 为什么我采用 java.nio.BufferUnderflowException

转载 作者:行者123 更新时间:2023-12-01 12:15:27 28 4
gpt4 key购买 nike

我从以下代码中获取 BufferUnderflowException。

int length = mBuf.remaining();
char[] charBuff = new char[length];

for (int i = 0; i < length; ++i) {
char[i] = mBuf.getChar();
}

mBuf 是一个字节缓冲区。行“char[i] =mBuf.getChar();”崩溃了。

您对这个问题有何看法?

最佳答案

您错误地认为 char 的大小是一个字节。在 Java 中,一个 char 是两个字节,因此 mBuf.getChar() 消耗两个字节。 documentation甚至指出该方法读取接下来的两个字节。

如果使用 mBuf.asCharBuffer() 返回的 CharBuffer ,该缓冲区的剩余()方法将为您提供您期望的数字。

更新:根据您的评论,我现在了解到您的缓冲区实际上包含一字节字符。由于 Java 处理整个 Unicode 指令集(包含数十万个字符),因此您必须告诉它您正在使用哪个 Charset(字符到字节编码):

// This is a pretty common one-byte charset.
Charset charset = StandardCharsets.ISO_8859_1;

// This is another common one-byte charset. You must use the same charset
// that was used to write the bytes in your ObjectiveC program.
//Charset charset = Charset.forName("windows-1252");

CharBuffer c = charset.newDecoder().decode(mBuf);
char[] charBuff = new char[c.remaining()];
c.get(charBuff);

关于java - 为什么我采用 java.nio.BufferUnderflowException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27044010/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com