Javaによるバイナリファイルの読み込みと書き込みについて
Javaでは、InputStream
や OutputStream
を使用してバイナリファイルを効率的に読み書きできます。ここでは、Javaを使ったバイナリファイル操作について、基本的な概念から実例まで詳しく解説します。
バイナリファイルとは
バイナリファイルは、0と1のビットデータで構成されており、人間が直接読み取れるテキストではない形式のファイルです。画像、音声、動画、プログラムファイルなど、幅広い種類のデータがバイナリ形式で保存されています。
Javaでは、バイナリファイルを操作するために、InputStream
と OutputStream
のクラス階層を使用します。
基本的なストリーム操作
バイナリファイルを操作する際、主に以下のストリームクラスを利用します。
FileInputStream
: バイナリファイルを読み込むためのストリーム。FileOutputStream
: バイナリファイルに書き込むためのストリーム。BufferedInputStream
: データの読み込みをバッファリングして効率化。BufferedOutputStream
: データの書き込みをバッファリングして効率化。DataInputStream
とDataOutputStream
: プリミティブ型データを読み書きするための補助クラス。
バイナリファイルの読み込み
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
を活用すると、リソースの自動解放が可能です。