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