Java 读取缓冲二进制文件(带seek)

Java 读取缓冲二进制文件(带seek),java,file-io,buffering,Java,File Io,Buffering,假设我需要读取巨大的二进制整数文件,一种简便的方法是: FileInputStream fi = new FileInputStream(file); BufferedInputStream bi = new BufferedInputStream( fi); DataInputStream di =new DataInputStream(bi); 但是现在我必须从第n个整数开始读取一个大的块。 到目前为止,我自己已经实现了一种缓冲: RandomAccessFile fp=new Rand

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

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

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

欢迎任何提示。
雅格布

看看NIO。例如,java.nio.MappedByteBuffer。

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

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

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

哦,这太简单了,太有效了!哦,这是如此简单和有效!