java - 将一定数量的字节读入 ByteBuffer

标签 java nio bytebuffer filechannel

我有一个 10MB 的二进制文件。我需要以不同大小的 block (例如 300、273 字节)读取它。为了阅读,我使用 FileChannelByteBuffer。现在,对于每次读取迭代,我都会分配我需要读取的新大小的 ByteBuffer 。

是否可以为 ByteBuffer 只分配一次(比如 200 KB)并读取它(300、273 字节等)?我不会一次阅读超过200KB。必须读取整个文件。

更新

public void readFile (FileChannel fc, int amountOfBytesToRead)
{
    ByteBuffer bb= ByteBuffer.allocate(amountOfBytesToRead);
    fc.read(bb);
    bb.flip();
    // do something with bytes
    bb = null;
}

由于内存限制,我无法一次读取整个文件。这就是为什么我要分块阅读。效率也非常重要(这就是为什么我不想使用当前的方法进行多次分配)。谢谢

最佳答案

声明几个您需要的大小的ByteBuffers并使用分散读取:read(ByteBuffer[] dsts, ...)

或者忘记 NIO 并使用 DataInputStream,readFully()。如果您将 BufferedInputStream 放在下面,您将不会遭受任何性能损失:它甚至可能会更快。

关于java - 将一定数量的字节读入 ByteBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27430029/

相关文章:

java - Linux 上的 FileChannel.write 会产生大量垃圾,但在 Mac 上不会

java - 如何编写 Drools 规则来验证数组或列表中的多个值

java - 字节数组的 JNI 内存泄漏

java - 在 Java 中轻松交换 double/float

Java 将包含文件和结构的子目录移动到父目录

Java nio SocketChannel 创建失败

c++ - 如何在 C++ 中将字节数组中的整数转换为数字

java - 如何确认 spring kafka 中的当前偏移量以进行手动提交

java - 在 ByteBuffer 中写入混合数据类型

Java 音频字节缓冲区需要不同的时间来填充