这段代码有什么问题? :
ByteBuffer byteBuffer = ByteBuffer.allocate(4);
FileChannel channel = cacheFile.getChannel();
int bytesCount = channel.read(byteBuffer, offset);
int value = byteBuffer.getInt();
最后一行总是抛出BufferUnderflowException。 变量bytesCount包含4。
我在这里想念什么?
答案 0 :(得分:5)
在阅读之前使用绝对的get或rewind缓冲区:
// option 1
int value = byteBuffer.getInt(0);
// option 2
buffer.rewind();
int value = byteBuffer.getInt();
虽然文档不是很明显(你必须点击链接,直到你到达ReadableByteChannel.read()),但读入缓冲区会改变缓冲区的位置。
答案 1 :(得分:0)
在使用get()或write()从中获取数据之前,必须翻转()缓冲区。