0

这段代码有什么问题?:

ByteBuffer byteBuffer = ByteBuffer.allocate(4);
FileChannel channel = cacheFile.getChannel();
int bytesCount = channel.read(byteBuffer, offset);
int value = byteBuffer.getInt();

最后一行总是抛出 BufferUnderflowException。变量 bytesCount 包含 4。

我在这里想念什么?

4

2 回答 2

5

在读取之前使用绝对 get 或倒带缓冲区:

// option 1
int value = byteBuffer.getInt(0);

// option 2
buffer.rewind();
int value = byteBuffer.getInt();

尽管文档不是很明显(您必须单击链接直到到达ReadableByteChannel.read()),但读入缓冲区会更改缓冲区的位置。

于 2013-06-21T20:29:23.960 回答
0

在使用 get() 或 write() 从缓冲区中取出数据之前,您必须翻转 () 缓冲区。

于 2013-06-21T23:37:15.593 回答