您当前的位置: 首页 >  Java

java.nio.BufferUnderflowException

发布时间:2017-12-04 14:38:12 ,浏览量:0

完整的错误信息:

Exception in thread "main" java.nio.BufferUnderflowException
	at java.nio.HeapByteBuffer.get(HeapByteBuffer.java:151)
	at com.weixiao.network.GatewayInstanceTest.main(GatewayInstanceTest.java:169)
这是在 main 函数中测试的,所以错误堆栈信息很少。

这是在操作 java.nio.ByteBuffer 时出现的错误。 错误原因:读取的长度超出了允许的长度:

例如下面的代码:

ByteBuffer params = ByteBuffer.allocate(2);//   这里只分配了2个字节,下面的params.get(tmp);却get了3个字节的数据。所以导致 java.nio.BufferUnderflowException 异常
        params.order(ByteOrder.LITTLE_ENDIAN); 
        byte[] tmp = new byte[3];
	params.get(tmp);
但实际使用中 ByteBuffer 的使用没有这么简单。

如何解决这个问题呢?

添加读取长度与 ByteBuffer 中可读取的长度的判断,例如:
while (writeBuffer.remaining() > 0) {
			byte b = writeBuffer.get();
		}

注意:你每次只读取一个字节,那就判断大于0就好了,如果不是一个记得修改条件哦!

总结

当 ByteBuffer.remaining()  小于要读取或写入的长度时,再执行读取或写入操作都会产生异常;

读取则产生 java.nio.BufferUnderflowException 异常,

写入则产生 java.nio.BufferOverflowException 异常。

当 ByteBuffer.remaining()  等于 0 时,不能再执行读取或写入操作,需要执行:clear() 操作,否则将产生异常。

你可能也会遇到这个异常: 

java.nio.BufferOverflowException
关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    109273博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.1640s