[英]Reading certain number of bytes into ByteBuffer
我有一个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;
}
由于内存限制,我无法一次读取整个文件。 这就是为什么我要分块阅读的原因。 效率也非常重要(这就是为什么我不想在多个分配中使用当前方法)。 谢谢
声明几个所需大小的ByteBuffers
并使用分散读取: read(ByteBuffer[] dsts, ...)
。
或者忘记NIO并使用DataInputStream,readFully()
。 如果将BufferedInputStream
放在下面,则不会损失任何性能:它甚至可能更快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.