Java では、RandomAccessFile クラスを使用してファイル内の任意の位置に直接アクセスでき、順不同で読み書きする必要があるデータを操作するのに最適です。 InputStream クラスや OutputStream クラスとは異なり、RandomAccessFile は、プリミティブ データ型 (int、double など) を操作するためのメソッドを提供する DataInput インターフェイスと DataOutput インターフェイスを実装します。
RandomAccess ファイルの構造とビルダー
コンストラクター:
RandomAccessFile(String nomeArquivo, String acesso)
void seek(long novaPos) throws IOException
コード例: Double 値へのランダム アクセス
以下は、6 つの double 値をファイルに書き込み、特定の位置で読み取る例です。
import java.io.*; class RandomAccessDemo { public static void main(String args[]) { double data[] = { 19.4, 10.1, 123.54, 33.0, 87.9, 74.25 }; double d; // Abre e usa um arquivo de acesso aleatório try (RandomAccessFile raf = new RandomAccessFile("random.dat", "rw")) { // Grava os valores no arquivo for(int i = 0; i < data.length; i++) { raf.writeDouble(data[i]); } // Lê valores específicos com o método seek() raf.seek(0); // Busca o primeiro valor d = raf.readDouble(); System.out.println("Primeiro valor: " + d); raf.seek(8); // Busca o segundo valor d = raf.readDouble(); System.out.println("Segundo valor: " + d); raf.seek(8 * 3); // Busca o quarto valor d = raf.readDouble(); System.out.println("Quarto valor: " + d); System.out.println("\nValores alternados:"); for(int i = 0; i < data.length; i += 2) { raf.seek(8 * i); // Busca o i-ésimo valor d = raf.readDouble(); System.out.print(d + " "); } } catch(IOException exc) { System.out.println("Erro de I/O: " + exc); } } }
コードの説明:
書き込み: double 値がrandom.datファイルに書き込まれます。各 double は 8 バイトを占めるため、各値は 8 バイトの倍数 (0、8、16、...) で始まります。
seek() による読み取り:
コード出力
出力例:
Primeiro valor: 19.4 Segundo valor: 10.1 Quarto valor: 33.0 Valores alternados: 19.4 123.54 87.9
重要なポイント:
Seek() による位置決め: ファイル内の任意の場所で読み取り/書き込みを行うポインタの位置を定義します。
バイトによる位置制御: 各 double は 8 バイトを占めるため、8 の倍数を使用して各値の位置を計算できます。
この例は、ファイル全体を走査せずに必要なポイントのみにアクセスして、大量のデータを効率的に処理するのに役立ちます。
以上がランダムアクセスファイルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。