为啥缓冲区未满时字节缓冲区会出现缓冲区溢出异常

Posted

技术标签:

【中文标题】为啥缓冲区未满时字节缓冲区会出现缓冲区溢出异常【英文标题】:Why do bytebuffer give buffer overflow exception when buffer is not full为什么缓冲区未满时字节缓冲区会出现缓冲区溢出异常 【发布时间】:2014-05-16 13:46:49 【问题描述】:

我不知道为什么下面的例子给出了缓冲区溢出异常。希望有人能解释原因,以及我如何正确地做到这一点。

就这么简单:

ByteBuffer bf = ByteBuffer.allocate(4);
bf.order(ByteOrder.BIG_ENDIAN);
bf.putInt(8);
bf.putInt(7); // Throws exception

目标:[0,0,8,7]

提前致谢!

【问题讨论】:

总字节数是多少? 哈哈,对不起。忘记插入数字而不是变量。 4 嗯,只是我现在得到的一个结论...... putInt 可能是 Int32? :P @Ikky 与 Java 中的 C 相反,int 的大小固定为 32 位 【参考方案1】:

一个 int 有 4 个字节长,因此您应该将 4 乘以需要存储在 ByteBuffer 中的 int 数。

【讨论】:

是的,在我问的那一刻就想到了:/ 谢谢 如果对你有帮助,请采纳为答案 :) 谢谢【参考方案2】:

javadoc 状态

BufferOverflowException - 如果此缓冲区中剩余的字节少于四个

您的totalNumberOfBytes 不能大到容纳 2 个整数,即。小于 8。

【讨论】:

以上是关于为啥缓冲区未满时字节缓冲区会出现缓冲区溢出异常的主要内容,如果未能解决你的问题,请参考以下文章

与内存有关的那些事儿(数组分配空间不够,导致缓冲区溢出,从而strcpy会出现异常)

C - 填充 TCP 套接字发送缓冲区

C语言中为了避免缓冲区溢出应尽量使用哪些函数

缓冲区溢出链接

Offbyone 缓冲区溢出有效负载中的 NULL 字节

win10系统出现缓冲区溢出怎么解决