Java : BufferedOutputStream - API使用例
BufferedOutputStream (Java SE 21 & JDK 21) の使い方まとめです。
だいたいのメソッドを網羅済みです。
API仕様書のおともにどうぞ。
概要
バッファリングされた出力ストリームを実装します。 このような出力ストリームを設定することにより、アプリケーションは、バイト単位でベースとなるシステムを呼び出さなくても、複数のバイトをベースとなる出力ストリームに書き込むことができます。
BufferedOutputStream は、バッファメモリを使い、OutputStream へ効率よく出力するためのクラスです。
BufferedOutputStream は使い終わったら close が必要です。
try-with-resources文 を使い、リソースリークが起きないようにしましょう。
final var file = Path.of("R:", "java-work", "aaa.data");
System.out.println(file); // R:\java-work\aaa.data
try (final var os = new BufferedOutputStream(Files.newOutputStream(file))) {
os.write(10);
os.write(20);
os.write(30);
}
final var ret = Files.readAllBytes(file);
System.out.println(Arrays.toString(ret)); // [10, 20, 30]
フィールド
protected byte[] buf
データが格納される内部バッファです。
protectedです。
独自にサブクラスを作ることは少ないと思いますので、コード例は割愛します。
protected int count
バッファの中の有効バイト数です。
protectedです。
独自にサブクラスを作ることは少ないと思いますので、コード例は割愛します。
FilterOutputStreamで宣言されたフィールド
out
「Java API 使用例 : FilterOutputStream」をご参照ください。
コンストラクタ
BufferedOutputStream (OutputStream out)
指定されたベースとなる出力ストリームにデータを書き込むためのバッファリングされた出力ストリームを作成します。
final var out = new ByteArrayOutputStream();
try (final var os = new BufferedOutputStream(out)) {
os.write(10);
os.write(20);
os.write(30);
}
System.out.println(Arrays.toString(out.toByteArray())); // [10, 20, 30]
BufferedOutputStream (OutputStream out, int size)
指定されたベースとなる出力ストリームにデータを書き込むためのバッファリングされた出力ストリームを、指定されたバッファ・サイズで作成します。
class MyOutputStream extends BufferedOutputStream {
MyOutputStream(OutputStream out) {
super(out);
}
MyOutputStream(OutputStream out, int size) {
super(out, size);
}
int getBufferSize() {
return buf.length;
}
}
try (final var os = new MyOutputStream(new ByteArrayOutputStream())) {
System.out.println(os.getBufferSize()); // 8192
}
try (final var os = new MyOutputStream(new ByteArrayOutputStream(), 32)) {
System.out.println(os.getBufferSize()); // 32
}
メソッド
void flush ()
バッファリングされた出力ストリームをフラッシュします。
final var out = new ByteArrayOutputStream();
try (final var os = new BufferedOutputStream(out)) {
os.write(10);
System.out.println(Arrays.toString(out.toByteArray())); // []
os.flush();
System.out.println(Arrays.toString(out.toByteArray())); // [10]
os.write(20);
System.out.println(Arrays.toString(out.toByteArray())); // [10]
os.flush();
System.out.println(Arrays.toString(out.toByteArray())); // [10, 20]
os.write(30);
System.out.println(Arrays.toString(out.toByteArray())); // [10, 20]
}
System.out.println(Arrays.toString(out.toByteArray())); // [10, 20, 30]
void write (byte[] b, int off, int len)
指定されたバイト配列のオフセット位置offから始まるlenバイトをこのバッファリングされた出力ストリームに書き込みます。
final var out = new ByteArrayOutputStream();
try (final var os = new BufferedOutputStream(out)) {
final byte[] b = {10, 20, 30, 40, 50};
os.write(b, 0, 2);
os.flush();
System.out.println(Arrays.toString(out.toByteArray())); // [10, 20]
os.write(b, 2, 3);
os.flush();
System.out.println(Arrays.toString(out.toByteArray())); // [10, 20, 30, 40, 50]
}
void write (int b)
指定されたバイト数をバッファリングされた出力ストリームに書き込みます。
final var out = new ByteArrayOutputStream();
try (final var os = new BufferedOutputStream(out)) {
os.write(10);
os.write(20);
os.write(30);
}
System.out.println(Arrays.toString(out.toByteArray())); // [10, 20, 30]
FilterOutputStreamで宣言されたメソッド
close, write
「Java API 使用例 : FilterOutputStream」をご参照ください。
OutputStreamで宣言されたメソッド
nullOutputStream
「Java API 使用例 : OutputStream」をご参照ください。