将ByteBuffer分配给Byte []错误

时间:2013-05-31 03:34:32

标签: java bytearray bytebuffer

我有一个课程如下:

final ByteBuffer data;

1st_constructor(arg1, arg2, arg3){
     data = ByteBuffer.allocate(8);   
     // Use "put" method to add values to the ByteBuffer
     //.... eg: 2 ints
     //....
}

1st_constructor(arg1, arg2){
    data = ByteBuffer.allocate(12);  
    // Use "put" method to add values to the ByteBuffer
    //.... eg: 3 ints
    //....  
}

我在这个类中创建了一个名为“test”的对象:

然后我创建了一个byte []。

   byte[] buf = new byte[test.data.limit()];

但是,当我尝试将对象中的ByteBuffer复制到byte []时,我收到错误。

test.data.get(buf,0,buf.length);

错误是:

Exception in thread "main" java.nio.BufferUnderflowException
at java.nio.HeapByteBuffer.get(Unknown Source)
at mtp_sender.main(mtp_sender.java:41)

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

在写入缓冲区并尝试从中读取之前,请致电Buffer.flip()。这会将 limit 设置为当前位置,并将位置设置为零。

在此之前,限制是容量,位置是下一个要写入的位置。如果在flipping()之前尝试get(),它将从当前位置向前读取到限制。这是尚未写入的缓冲区的一部分。它有 limit - position 字节,它小于你在get()中请求的 limit 字节 - 因此抛出了缓冲区下溢异常。