[Java] バイト入出力ストリーム

画像ファイルなどのバイナリーデータの入出力については、バイトストリームを扱うクラスが用意されています。ここでは、バイトストリームの入出力についてまとめていきます。

バイト入出力ストリーム

FileInputStreamクラス

ファイルからバイトストリームを読み込みます。

1. FileInputStreamクラスの主なメソッド
byte read() ファイルから1バイト読み込むで返す。
byte[] readNBytes(int) ファイルから指定バイト数を読み込んで配列を返す。
byte[] readAllBytes() ファイルから全バイトを一度に取り出して配列で返す。大きなサイズのファイルの場合メモリを大量に使用するので、一般的にはreadNBytes(int)を使用する。

FileOutputStreamクラス

バイトストリームをファイルへ出力します。

2. FileOutStreamクラスの主なメソッド
void write(int) ファイルへ1バイト出力する。
void write(byte[]) ファイルへ複数バイトを出力する。

コードサンプル

以下の例はsample1.pngファイルを1024バイトずつ読み込んで、sample2.pngへコピーする例です。

FileInputStream fileInputStream = new FileInputStream("test/sample1.png");
FileOutputStream fileOutputStream = new FileOutputStream("test/sample2.png");

try (
        fileInputStream; fileOutputStream;
) {
    byte[] data = null;
    while ((data = fileInputStream.readNBytes(1024)).length > 0) {
        fileOutputStream.write(data);
        System.out.println(data.length);
    }
    fileOutputStream.flush();
}

バッファを使ったバイトストリームの入出力

FileInputStreamやFileOutputStreamには、バッファを使って効率的に処理するためのクラスが用意されています。

BufferedInputStreamクラス

ファイルからバイトストリームをバッファを使って読み込みます。メソッドはInputStreamを継承しているのでFileInputStreamとほぼ同じです。

コンストラクタにFileInputStreamを指定して、インスタンスを生成します。

BufferedOutputStreamクラス

バイトストリームをバッファを使って出力します。メソッドはOutputStreamを継承しているのでFileOutputStreamとほぼ同じです。

コンストラクタにFileOutputStreamを指定して、インスタンスを生成します。

コードサンプル

実行結果はバイト入出力ストリームのコードサンプルの結果と同じですが、バッファを使って処理しているので効率的に処理されています。

FileInputStream fileInputStream = new FileInputStream("test/sample1.png");
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);

FileOutputStream fileOutputStream = new FileOutputStream("test/sample2.png");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);

try (
        fileInputStream; bufferedInputStream;
        fileOutputStream; bufferedOutputStream;
) {
    byte[] data = null;
    while ((data = bufferedInputStream.readNBytes(1024)).length > 0) {
        bufferedOutputStream.write(data);
        System.out.println(data.length);
    }
    bufferedOutputStream.flush();
}

コメント

このブログの人気の投稿

docker-compose up で proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host

docker-compose で起動したweb、MySQLに接続できない事象

【PHP】PHP_CodeSnifferを使う(コーディングルールのカスタマイズ)