広告

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」をご参照ください。


関連記事

ページの先頭へ