如何在Java中读取大型二进制文件

如何在Java中读取大型二进制文件,java,file,memory,binary,Java,File,Memory,Binary,我想用Java读取一个二进制文件,其中包含m个数据集。我知道每个数据集由3个元素组成:一个长数字、一个双倍数字和该序列中的一个长数字。数据集一个接一个地重复,直到文件结束。假设数据集的数量m已知,我如何在不将所有数据集传递到主存的情况下读取Java文件,从而能够读取不“适合”主存的大型文件 如果您想要顺序访问: import java.io.FileInputStream; import java.io.DataInputStream; DataInputStream dis = new Da

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

如果您想要顺序访问:

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();
import java.io.FileInputStream;
导入java.io.DataInputStream;
DataInputStream dis=新的DataInputStream(新文件InputStream(“input.bin”))
for(int i=0;i
如果文件中的“记录”大小固定,则可以使用
RandomAccessFile
,尤其是
seek
方法移动到要读取的位置。API还提供了读取long和double的方法

我的指令是:“数据集不应该全部在主存中读取”。我如何处理这个问题

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

我使用java.nio,它提供缓冲,因为我还需要一些附加功能,如设置字节顺序。
除了johnchen902的解决方案之外,您还可以从流中读取缓冲区中的字节数,并将它们放入缓冲区。

java.io.FileInputStream
java.io.DataInputStream
readLong()
readDouble()
我将查看Apache Commons FileUtils。它通常比标准好utilities@peter.murray.rust-除了没有处理二进制文件的方法之外。试试java.util.Scanner最重要的是如何避免在主存储器中传递整个文件,这就是我的问题所在。我的说明是:“数据集不应该全部在主存储器中读取”. 我如何处理这个问题?