我有一个课程如下:
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)
感谢您的帮助。
答案 0 :(得分:2)
在写入缓冲区并尝试从中读取之前,请致电Buffer.flip()。这会将 limit 设置为当前位置,并将位置设置为零。
在此之前,限制是容量,位置是下一个要写入的位置。如果在flipping()之前尝试get(),它将从当前位置向前读取到限制。这是尚未写入的缓冲区的一部分。它有 limit - position 字节,它小于你在get()中请求的 limit 字节 - 因此抛出了缓冲区下溢异常。