我有一个10MB的二进制文件。我需要以不同大小的块(例如300,273字节)读取它。为了阅读,我使用了FileChannel
和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;
}
由于内存限制,我无法立即读取整个文件。这就是我进行大块阅读的原因。效率也非常重要(这就是为什么我不想在多个分配中使用我当前的方法)。感谢
答案 0 :(得分:2)
声明您需要的几个ByteBuffers
尺寸并使用散点图:read(ByteBuffer[] dsts, ...)
。
或者忘掉NIO并使用DataInputStream,readFully()
。如果你在BufferedInputStream
下面放置了一个你不会遭受任何性能损失:它甚至可能更快。