1

m 個のデータセットを含むバイナリ ファイルを Java で読みたいと思っています。各データセットが 3 つの要素で構成されていることはわかっています: long 数、double 数、long 数のシーケンスです。データセットは、ファイルの最後まで次々と繰り返されます。データセットの数 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 に答える