ByteBuffer 下溢

Posted

技术标签:

【中文标题】ByteBuffer 下溢【英文标题】:ByteBuffer underflow 【发布时间】:2014-05-15 12:54:26 【问题描述】:

我尝试使用 java 库 ByteBuffer 并编写了以下代码示例:

    ByteBuffer buf = ByteBuffer.allocate(32);
    buf.putInt(4);
    buf.putInt(8);
    buf.putInt(12);
    buf.putInt(16);
    buf.putInt(20);
    buf.putInt(24);
    buf.putInt(28);
    buf.putInt(32);
    buf.order(ByteOrder.LITTLE_ENDIAN);
    byte[] temp = new byte[32];
    buf.get(temp);

由于某种原因,它在最后一行抛出了BufferUnderflowException。

我不知道为什么,谁能解释我做错了什么?

【问题讨论】:

【参考方案1】:

如 java 文档中所述

相对get方法。 ...

抛出: BufferUnderflowException 如果缓冲区的当前位置不小于其限制

查找更多here

【讨论】:

是的 - 并且可能会添加 putInt 自动增加位置 感谢命令 buf.position(0);之前 buf.get(temp);解决了!【参考方案2】:

看看http://mindprod.com/jgloss/bytebuffer.html

您必须调用 ByteBuffer.flip 将通过物理 I/O 填充缓冲区转换为通过 ByteBuffer.get 清空它

【讨论】:

以上是关于ByteBuffer 下溢的主要内容,如果未能解决你的问题,请参考以下文章

是否存在允许动态增长和扩展 java.nio.ByteBuffer 的 ByteBuffer 实现?

为啥 ByteBuffer.allocate() 和 ByteBuffer.allocateDirect() 之间的奇怪性能曲线差异

ByteBuffer类学习

ByteBuffer 介绍及 C++ 实现

ByteBuffer 介绍及 C++ 实现

Netty——字符串与 ByteBuffer相互转换示例