ランダムアクセスファイル

Barbara Streisand
リリース: 2024-11-10 08:42:02
オリジナル
444 人が閲覧しました

Java では、RandomAccessFile クラスを使用してファイル内の任意の位置に直接アクセスでき、順不同で読み書きする必要があるデータを操作するのに最適です。 InputStream クラスや OutputStream クラスとは異なり、RandomAccessFile は、プリミティブ データ型 (int、double など) を操作するためのメソッドを提供する DataInput インターフェイスと DataOutput インターフェイスを実装します。

RandomAccess ファイルの構造とビルダー
コンストラクター:

RandomAccessFile(String nomeArquivo, String acesso)

ログイン後にコピー
  • ファイル名: ファイル名。
  • アクセス: アクセスのタイプを定義します (読み取りの場合は「r」、読み取りと書き込みの場合は「rw」)。
  • Seek(long Position) メソッド: ファイル内のポインターの位置を定義します。
void seek(long novaPos) throws IOException

ログイン後にコピー
  • novaPos: ファイルの先頭からのバイト単位の位置。シーク後、新しい位置から読み取り/書き込みが行われます。

コード例: 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() による読み取り:

  • 最初の値: バイト 0 から始まります。
  • 2 番目の値: バイト 8 から始まります。
  • 4 番目の値: バイト 24 から始まります (8 * 3 = 24 であるため、3 番目のインデックス)。
  • 交互の値: 16 バイトごと (各値の間は 8 バイト)、値が読み取られます。

コード出力
出力例:

Primeiro valor: 19.4
Segundo valor: 10.1
Quarto valor: 33.0

Valores alternados:
19.4 123.54 87.9

ログイン後にコピー

重要なポイント:
Seek() による位置決め: ファイル内の任意の場所で読み取り/書き込みを行うポインタの位置を定義します。
バイトによる位置制御: 各 double は 8 バイトを占めるため、8 の倍数を使用して各値の位置を計算できます。
この例は、ファイル全体を走査せずに必要なポイントのみにアクセスして、大量のデータを効率的に処理するのに役立ちます。

Arquivos de acesso aleatório

以上がランダムアクセスファイルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート