如何从具有NIO的文件读取Integer而不是获取BufferUnderflowException?

时间:2013-06-21 20:18:28

标签: java nio

这段代码有什么问题? :

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

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

我在这里想念什么?

2 个答案:

答案 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()从中获取数据之前,必须翻转()缓冲区。