如何用Java读取一个大的二进制文件

时间:2013-04-20 08:53:00

标签: java file memory binary

我想用Java读取二进制文件,其中包含m个数据集。我知道每个数据集由3个元素组成:一个长数字,一个双数字和一个长数字。数据集一个接一个地重复,直到文件结束。假设已知数据集的数量m,如何在不将所有数据集传递到主存储器的情况下读取Java文件,以便能够读取大型文件,这些文件不适合主内存?

3 个答案:

答案 0 :(得分:3)

如果您想要顺序访问:

import java.io.FileInputStream;
import java.io.DataInputStream;

DataInputStream dis = new DataInputStream(new FileInputStream("input.bin"))
for(int i = 0; i < m; i++){
    long l1 = dis.readLong();
    double d1 = dis.readDouble();
    long l2 = dis.readLong();
    /* do what you need */
}
dis.close();

答案 1 :(得分:0)

如果文件中的“记录”具有固定大小,则可以使用RandomAccessFile,尤其是seek方法移动到您想要读取的位置。 API还提供了读取long和double的方法。

  

我的指令是:“数据集不应全部在主存储器中读取”。我怎么解决这个问题?

使用seek定位文件,只读取需要阅读的数据集。

答案 2 :(得分:0)

我使用java.nio http://download.oracle.com/javase/7/docs/api/java/nio/package-summary.html提供缓冲,因为我需要一些额外的功能,比如设置字节顺序。 除了johnchen902的解决方案之外,您还可以从流中读取缓冲区中的字节数并将它们放入缓冲区。