1

假设我需要读取巨大的整数二进制文件,一个方便的方法是:

FileInputStream fi = new FileInputStream(file);
BufferedInputStream bi = new BufferedInputStream( fi); 
DataInputStream di =new DataInputStream(bi);

但是现在说我必须从第 n 个整数开始读取一个巨大的块。到目前为止,我已经自己实现了一种缓冲区:

RandomAccessFile fp=new RandomAccessFile(file);
fp.seek(position);
byte[] buff= new  byte[len];
fp.read(buff, 0, len);
ByteArrayInputStream bIn = new ByteArrayInputStream(buff);
DataInputStream dIn= new DataInputStream(bIn);

现在我可以解析数据 buff,处理它,然后读取下一个块。

我想知道是否有一些我可以使用的标准缓冲区对象。我想简化我的代码,而不是自己处理缓冲。

欢迎任何提示。雅格布

4

2 回答 2

2

看看蔚来。例如,java.nio.MappedByteBuffer。

于 2010-12-07T09:35:09.687 回答
2

只需从 fi.skip(position) 开始,然后用 bi 和 di 包装它。当位置足够大时,底层流实际上会调用 seek。

于 2010-12-07T09:45:16.533 回答