我有一个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;
}
由于内存限制,我无法立即读取整个文件 . 这就是我进行大块阅读的原因 . 效率也非常重要(这就是为什么我不想在多个分配中使用我当前的方法) . 谢谢
1 回答
声明几个
ByteBuffers
所需的大小并使用scatter-read:read(ByteBuffer[] dsts, ...)
.或者忘记NIO并使用
DataInputStream,readFully()
. 如果你把BufferedInputStream
放在下面,你将不会遭受任何性能损失:它甚至可能更快 .