java - 如何使用 NIO 从文件中读取整数而不出现 BufferUnderflowException?

标签 java nio

这段代码有什么问题? :

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

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

我在这里想念什么?

最佳答案

在读取之前使用绝对获取或倒回缓冲区:

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

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

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

关于java - 如何使用 NIO 从文件中读取整数而不出现 BufferUnderflowException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17243652/

相关文章:

java - 使用 Parcelable | 使用 Intent 从一个 Activity 向另一个 Activity 发送列表对象安卓

Java NIO MappedByteBuffer 内存溢出异常

java - 多线程非阻塞 IO 选择器

java - 使用 TrasformFactory 时出现错误 : 'The first argument to the non-static Java function ' evaluate' is not a valid object reference.

java - 计算地点与用户位置之间的距离Android Studio

java循环中的前自增、后自增和自赋值

Java NIO 与 sql 数据库

java - 如何创建一个方法来检查数组中是否有奇数?

java - Android 套接字上的选择器行为异常

java - Linux 机器上 Netty 4.1 的性能调优