0

我有一堂课如下:

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[] 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)

谢谢您的帮助。

4

1 回答 1

3

在写入缓冲区和尝试读取缓冲区之间,调用Buffer.flip()。这将限制设置为当前位置,并将位置设置回零。

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

于 2013-05-31T03:45:41.413 回答