Java では、BufferedOutputStream クラスを使用して、出力ストリームにデータをより効率的に書き込みます。別の出力ストリームにバッファを追加し、宛先 (ファイルなど) にデータを書き込む前にメモリにデータを一時的に保存することで、I/O 操作の数を減らします。
これは java.io パッケージに属し、FilterOutputStream クラスを拡張します。
クラス宣言
パブリック クラス BufferedOutputStream は FilterOutputStream を拡張します
- バッファを使用して直接ディスク アクセスを減らすことにより、I/O パフォーマンスが向上します。
- データはバッファに書き込まれ、バッファがいっぱいになった (またはフラッシュされた) 場合にのみ、基礎となる出力ストリームに送信されます。
- 通常は FileOutputStream とともに使用されます。
- 画像テキストファイルやバイナリデータなどのバイトデータの書き込みに役立ちます。
コンストラクター
- BufferedOutputStream(出力ストリーム出力): デフォルトのバッファ サイズ 8192 バイトでバッファ付き出力ストリームを作成します。
- BufferedOutputStream(OutputStream 出力 int サイズ): 指定されたバッファ サイズでバッファ付き出力ストリームを作成します。
重要な方法
| 方法 | 説明 |
|---|---|
void write(int b) | 単一バイトを出力ストリームに書き込みます。 |
void write(byte[] b int off int len) | バイト配列の一部を出力ストリームに書き込みます。 |
void flush() | バッファをフラッシュし、バッファされた出力バイトを強制的に書き込みます。 |
void close() | 最初にフラッシュしてストリームを閉じます。 |
Java import java.io.*; public class BufferedOutputStreamExample { public static void main(String[] args) { String data = 'BufferedOutputStream in Java Example'; try { FileOutputStream fileOut = new FileOutputStream('output.txt'); BufferedOutputStream bufferOut = new BufferedOutputStream(fileOut); byte[] bytes = data.getBytes(); bufferOut.write(bytes); bufferOut.close(); System.out.println('Data written successfully.'); } catch (IOException e) { e.printStackTrace(); } } }
import java.io.*; public class BufferedOutputStreamExample { public static void main(String[] args) { String data = 'BufferedOutputStream in Java Example'; try { FileOutputStream fileOut = new FileOutputStream('output.txt'); BufferedOutputStream bufferOut = new BufferedOutputStream(fileOut); byte[] bytes = data.getBytes(); bufferOut.write(bytes); bufferOut.close(); System.out.println('Data written successfully.'); } catch (IOException e) { e.printStackTrace(); } } }
出力 (output.txt の内容):
Java での BufferedOutputStream の例
例 2: flash() メソッドの使用
Javaimport java.io.*; public class FlushExample { public static void main(String[] args) { try { FileOutputStream fileOut = new FileOutputStream('flush.txt'); BufferedOutputStream bufferOut = new BufferedOutputStream(fileOut); bufferOut.write('Hello'.getBytes()); bufferOut.flush(); // ensures data is written immediately bufferOut.close(); System.out.println('Flush example completed.'); } catch (IOException e) { e.printStackTrace(); } } }
出力 (flush.txt の内容):
こんにちは
Java import java.io.*; public class LargeDataExample { public static void main(String[] args) { try { FileOutputStream fileOut = new FileOutputStream('large.txt'); BufferedOutputStream bufferOut = new BufferedOutputStream(fileOut 8192); // custom buffer size for (int i = 0; i < 1000; i++) { bufferOut.write(('Line ' + i + 'n').getBytes()); } bufferOut.close(); System.out.println('Large data written successfully.'); } catch (IOException e) { e.printStackTrace(); } } }
import java.io.*; public class LargeDataExample { public static void main(String[] args) { try { FileOutputStream fileOut = new FileOutputStream('large.txt'); BufferedOutputStream bufferOut = new BufferedOutputStream(fileOut 8192); // custom buffer size for (int i = 0; i < 1000; i++) { bufferOut.write(('Line ' + i + 'n').getBytes()); } bufferOut.close(); System.out.println('Large data written successfully.'); } catch (IOException e) { e.printStackTrace(); } } }
出力 (large.txt の最初の数行の内容):
0行目
1行目
2行目
...
利点
- バッファリングされていないストリームと比較して、書き込みパフォーマンスが高速になります。
- 物理的な書き込み操作の数を減らします。