[Java] バイト入出力ストリーム
画像ファイルなどのバイナリーデータの入出力については、バイトストリームを扱うクラスが用意されています。ここでは、バイトストリームの入出力についてまとめていきます。
バイト入出力ストリーム
FileInputStreamクラス
ファイルからバイトストリームを読み込みます。
byte read() | ファイルから1バイト読み込むで返す。 |
---|---|
byte[] readNBytes(int) | ファイルから指定バイト数を読み込んで配列を返す。 |
byte[] readAllBytes() | ファイルから全バイトを一度に取り出して配列で返す。大きなサイズのファイルの場合メモリを大量に使用するので、一般的にはreadNBytes(int)を使用する。 |
FileOutputStreamクラス
バイトストリームをファイルへ出力します。
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();
}
コメント
コメントを投稿