Javaによるバイナリファイルの読み込みと書き込みについて

Javaによるバイナリファイルの読み込みと書き込みについて

Javaでは、InputStreamOutputStream を使用してバイナリファイルを効率的に読み書きできます。ここでは、Javaを使ったバイナリファイル操作について、基本的な概念から実例まで詳しく解説します。

バイナリファイルとは

バイナリファイルは、0と1のビットデータで構成されており、人間が直接読み取れるテキストではない形式のファイルです。画像、音声、動画、プログラムファイルなど、幅広い種類のデータがバイナリ形式で保存されています。

Javaでは、バイナリファイルを操作するために、InputStreamOutputStream のクラス階層を使用します。

基本的なストリーム操作

バイナリファイルを操作する際、主に以下のストリームクラスを利用します。

  • FileInputStream: バイナリファイルを読み込むためのストリーム。
  • FileOutputStream: バイナリファイルに書き込むためのストリーム。
  • BufferedInputStream: データの読み込みをバッファリングして効率化。
  • BufferedOutputStream: データの書き込みをバッファリングして効率化。
  • DataInputStreamDataOutputStream: プリミティブ型データを読み書きするための補助クラス。

バイナリファイルの読み込み

Javaでバイナリファイルを読み込むには、FileInputStream を利用します。以下に例を示します。

例: バイナリファイルを1バイトずつ読み込む


import java.io.FileInputStream;
import java.io.IOException;

public class BinaryFileReader {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("example.bin")) {
            int data;
            while ((data = fis.read()) != -1) {
                System.out.print(data + " "); // バイト値を表示
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
    

このコードはファイルを1バイトずつ読み込み、終端(-1)に達するまで繰り返します。

例: バッファを利用して効率的に読み込む


import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.io.IOException;

public class BufferedBinaryFileReader {
    public static void main(String[] args) {
        try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("example.bin"))) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = bis.read(buffer)) != -1) {
                for (int i = 0; i < bytesRead; i++) {
                    System.out.print(buffer[i] + " ");
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
    

バイナリファイルの書き込み

Javaでは、FileOutputStream を利用してバイナリデータを書き込みます。

例: バイト配列をファイルに書き込む


import java.io.FileOutputStream;
import java.io.IOException;

public class BinaryFileWriter {
    public static void main(String[] args) {
        byte[] data = {10, 20, 30, 40, 50};
        try (FileOutputStream fos = new FileOutputStream("output.bin")) {
            fos.write(data);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
    

このコードは、data 配列の内容をoutput.binという名前のファイルに書き込みます。

例: バッファリングを利用して効率的に書き込む


import java.io.FileOutputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;

public class BufferedBinaryFileWriter {
    public static void main(String[] args) {
        byte[] data = new byte[1024];
        for (int i = 0; i < data.length; i++) {
            data[i] = (byte) i;
        }
        try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("buffered_output.bin"))) {
            bos.write(data);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
    

読み込みと書き込みの例

以下は、ファイルを読み込み、別のファイルに書き込む例です。


import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyBinaryFile {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("input.bin");
             FileOutputStream fos = new FileOutputStream("output_copy.bin")) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = fis.read(buffer)) != -1) {
                fos.write(buffer, 0, bytesRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
    

よくあるエラーと対処法

  • ファイルが見つからない: ファイルパスが正しいか確認してください。
  • 権限エラー: ファイルにアクセスするための権限があるか確認してください。
  • EOFException: データを正しく読み切ったか確認してください。

バイナリファイルの操作には、リソース管理やエラー処理が重要です。try-with-resourcesを活用すると、リソースの自動解放が可能です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です