1

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

4

3 回答 3

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();
于 2013-04-20T09:10:07.300 回答
0

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

于 2014-01-09T08:49:19.033 回答
0

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

我的指令是:“数据集不应该全部读入主存储器”。我该如何解决这个问题?

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

于 2013-04-20T09:10:37.640 回答