【问题标题】:reading buffered binary file (with seek)读取缓冲的二进制文件(带查找)
【发布时间】:2010-12-07 09:29:25
【问题描述】:

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

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中的数据,处理它,然后读取下一个块。

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

欢迎任何提示。 雅各布

【问题讨论】:

    标签: java file-io buffering


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 哦,这太简单了,太有效了!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 2013-05-20
      • 2014-11-21
      • 1970-01-01
      • 2016-12-19
      • 2011-07-05
      相关资源
      最近更新 更多