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() 之间的奇怪性能曲线差异