Java BufferedOutputStream:効率的なバイト書き込み解説
Java BufferedOutputStream:効率的なバイト書き込み解説
BufferedOutputStreamクラスの設計、使用法、コアメソッドを明確な説明と実践コードスニペットでマスターします。
java.ioパッケージのBufferedOutputStreamクラスは、別のOutputStreamをラップしてバイトレベル出力を高速化します。データをメモリにバッファリングすることで、基盤デバイスへの書き込み操作回数を削減し、特に大容量ファイルでパフォーマンスを大幅に向上させます。
抽象OutputStreamクラスを継承し、そのメソッドの具象実装を提供します。
BufferedOutputStreamの仕組み
ストリームはデフォルトで8 KiB(8,192バイト)のバッファを内部的に割り当てます。write()が呼び出されると、バイトはまずこのバッファに格納されます。バッファが満杯になるか、flush()またはclose()が呼び出されたときのみ、データが基盤ストリームにフラッシュされます。
ディスクI/Oは高コストであるため、このバッファリング戦略によりラウンドトリップが削減され、バイト書き込みが大幅に高速化されます。
BufferedOutputStreamの作成
クラスをインポートし、任意のOutputStream(通常はFileOutputStream)をラップ:
FileOutputStream file = new FileOutputStream("output.txt");
BufferedOutputStream buffer = new BufferedOutputStream(file);
バッファサイズを制御するには、第2引数を指定:
BufferedOutputStream buffer = new BufferedOutputStream(file, 16384); // 16 KiBバッファ
より大きなバッファは非常に大きな書き込みに有益ですが、デフォルトの8 KiBがほとんどのシナリオで適しています。
BufferedOutputStreamの主要メソッド
クラスはバッファリングサポート付きでOutputStreamの全メソッドセットを実装します。
write()
write(int b)– 1バイトをバッファに追加write(byte[] b)– バイト配列全体を書き込みwrite(byte[] b, int off, int len)– オフセットoffからlenバイトを書き込み
例:テキストをファイルに書き込み
import java.io.*;
public class Main {
public static void main(String[] args) {
String data = "This is a line of text inside the file";
try (FileOutputStream fos = new FileOutputStream("output.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos)) {
bos.write(data.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
このプログラムを実行すると、output.txtが作成され以下が含まれます:
This is a line of text inside the file
注意: String.getBytes()はプラットフォームのデフォルトcharsetを使用して文字列をバイト配列に変換します。決定論的な結果を得るにはcharsetを指定、例:data.getBytes(StandardCharsets.UTF_8)。
flush()
バッファされたデータを即座に基盤ストリームに書き出し強制します。ストリームを閉じる前にデータ持続性を確保する必要がある場合や、ネットワークソケットへの書き込み時に有用です。
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write(data.getBytes());
bos.flush(); // データ送信を保証
close()
ストリームを閉じ、残りデータをフラッシュし、システムリソースを解放。close()呼び出し後、ストリームは再利用不能になります。
包括的なリファレンスは公式Javaドキュメントを参照:BufferedOutputStream API
Java
- Javaのfinalキーワード完全解説:変数、メソッド、クラスでの活用法
- Java instanceof演算子完全ガイド:基本から継承・インターフェースまで
- Java継承のマスター:概念、種類、実践例
- Java Staticネストクラスの理解:用法、違い、実例
- Java無名インナークラス完全ガイド:定義、構文、実践例
- Javaシングルトンパターン完全解説:安全な実装と活用法
- Javaリフレクション完全ガイド:実行時のクラス・メソッド・フィールド検査
- Java ArrayList完全マスター:操作・メソッド・ベストプラクティス
- Java ObjectOutputStream完全ガイド:シリアル化、メソッド、実践例
- Javaジェネリクス完全ガイド:再利用可能で型安全なコードの構築
- Javaファイル操作のマスター:java.ioによる作成・読み取り・書き込み・削除