我试试这段代码:
byte arr[] = ByteBuffer.allocate(2).putInt(1).array()
但它失败了BufferOverflowException
。
1太大而无法存储在2个字节中?或者是我的问题在其他地方?
答案 0 :(得分:3)
1太大而无法存储在2个字节中?
嗯,int
是...... putInt
总是写4个字节。来自documentation for ByteBuffer.putInt
抛出:
BufferOverflowException - 如果此缓冲区中剩余的字节少于四个
如果您只想放置一个两字节的整数,请改用putShort
。如果要以可变宽度编码存储数据(其中占用的空间取决于值),您可能需要自己编写代码。
答案 1 :(得分:1)
来自方法putInt
的javadoc:
以当前字节顺序将包含给定int值的四个字节写入当前位置的此缓冲区,然后将位置增加四个
您只分配了2个字节,因此BufferOverflowException
:
当相对 put操作达到目标缓冲区的限制时抛出未经检查的异常。
您可以解决缓冲区的4个字节的扩展或使用仅使用2个字节存储数字1的putShort。
答案 2 :(得分:1)
ByteBuffer.putInt(1)
将一个整数值放入缓冲区。整数长度为4个字节(32位)。