Java(Android) - 关于putInt的BufferOverflowException

时间:2017-02-21 10:23:13

标签: java exception buffer

我试试这段代码: byte arr[] = ByteBuffer.allocate(2).putInt(1).array() 但它失败了BufferOverflowException。 1太大而无法存储在2个字节中?或者是我的问题在其他地方?

3 个答案:

答案 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位)。