首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我为什么要带java.nio.BufferUnderflowException

我为什么要带java.nio.BufferUnderflowException
EN

Stack Overflow用户
提问于 2014-11-20 16:01:12
回答 1查看 2K关注 0票数 0

我从下面的代码中提取BufferUnderflowException。

代码语言:javascript
复制
int length = mBuf.remaining();
char[] charBuff = new char[length];

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

mBuf是ByteBuffer。行"chari =mBuf.getChar();“崩溃。

你对这个问题怎么看?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-20 16:10:42

您错误地认为一个字符的大小是一个字节。在Java中,char是两个字节,所以mBuf.getChar()消耗了两个字节。文档甚至声明该方法读取下两个字节。

如果使用由CharBuffer返回的mBuf.asCharBuffer(),则缓冲区的that ()方法将给出所需的数字。

更新:基于您的评论,我现在了解到缓冲区实际上包含一个字节字符。由于Java处理整个Unicode配置表(其中包含数十万个字符),所以必须告诉它您使用的是哪个字符集(从字符到字节编码):

代码语言:javascript
复制
// 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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27044010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档