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