将一定数量的字节读入ByteBuffer

时间:2014-12-11 18:36:09

标签: java nio bytebuffer filechannel

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

答案 0 :(得分:2)

声明您需要的几个ByteBuffers尺寸并使用散点图:read(ByteBuffer[] dsts, ...)

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