0

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

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

UPD

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

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

4

1 回答 1

2

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

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

于 2014-12-11T21:26:55.570 回答