首页 文章

将一定数量的字节读入ByteBuffer

提问于
浏览 198
0

我有一个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 回答

  • 2

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

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

相关问题