広告

Java : FilterOutputStream - API使用例

FilterOutputStream (Java SE 21 & JDK 21) の使い方まとめです。
だいたいのメソッドを網羅済みです。
API仕様書のおともにどうぞ。


概要

このクラスは、出力ストリームをフィルタ処理するすべてのクラスのスーパー・クラスです。 これらのストリームは、データの基本のシンクとして使用するための既存の出力ストリーム(ベースとなる出力ストリーム)の最上位にあります。ただし、データを途中で変換することや、追加機能を提供することもあります。

クラス構成

FilterOutputStream は、OutputStream オブジェクトをラップするだけのクラスです。
BufferedOutputStreamDataOutputStream などのスーパークラスとして使われています。

FilterOutputStream は使い終わったら close が必要です。
try-with-resources文 を使い、リソースリークが起きないようにしましょう。

class MyOutputStream extends FilterOutputStream {
    MyOutputStream(OutputStream out) {
        super(out);
    }
}

final var out = new ByteArrayOutputStream();

try (final var os = new MyOutputStream(out)) {
    os.write(10);
    os.write(20);
    os.write(30);
}

System.out.println(Arrays.toString(out.toByteArray())); // [10, 20, 30]

フィールド

protected OutputStream out

フィルタ処理されるベースとなる出力ストリームです。

class MyOutputStream extends FilterOutputStream {
    MyOutputStream(OutputStream out) {
        super(out);
    }

    OutputStream getOut() {
        return out;
    }
}

final var out = new ByteArrayOutputStream();

try (final var os = new MyOutputStream(out)) {
    System.out.println(os.getOut() == out); // true
}

コンストラクタ

FilterOutputStream (OutputStream out)

指定されたベースとなる出力ストリームの上位に出力ストリーム・フィルタを作成します。

class MyOutputStream extends FilterOutputStream {
    MyOutputStream(OutputStream out) {
        super(out);
    }
}

final var out = new ByteArrayOutputStream();

try (final var os = new MyOutputStream(out)) {
    os.write(10);
    os.write(20);
    os.write(30);
}

System.out.println(Arrays.toString(out.toByteArray())); // [10, 20, 30]

メソッド

void close ()

出力ストリームを閉じ、これに関連するすべてのシステム・リソースを解放します。

final var out = new ByteArrayOutputStream();

try (final FilterOutputStream os = new BufferedOutputStream(out)) {
    os.write(10);
    os.write(20);
    os.write(30);
}

System.out.println(Arrays.toString(out.toByteArray())); // [10, 20, 30]
// try-with-resources文を使わない例です。
final var out = new ByteArrayOutputStream();
final FilterOutputStream os = new BufferedOutputStream(out);
try {
    os.write(10);
    os.write(20);
    os.write(30);
} finally {
    os.close();
}

System.out.println(Arrays.toString(out.toByteArray())); // [10, 20, 30]

void flush ()

出力ストリームをフラッシュして、バッファリングされていたすべての出力バイトを強制的にストリームに書き込みます。

final var out = new ByteArrayOutputStream();

try (final FilterOutputStream 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)

b.lengthバイトのデータをこの出力ストリームに書き込みます。

final var out = new ByteArrayOutputStream();

try (final FilterOutputStream os = new BufferedOutputStream(out)) {

    final byte[] b1 = {10, 20};

    os.write(b1);
    os.flush();
    System.out.println(Arrays.toString(out.toByteArray())); // [10, 20]

    final byte[] b2 = {30, 40, 50};

    os.write(b2);
    os.flush();
    System.out.println(Arrays.toString(out.toByteArray())); // [10, 20, 30, 40, 50]
}

void write (byte[] b, int off, int len)

指定されたbyte配列のオフセット位置offから始まるlenバイトをこの出力ストリームに書き込みます。

final var out = new ByteArrayOutputStream();

try (final FilterOutputStream 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)

指定されたbyteをこの出力ストリームに書き込みます。

class MyOutputStream extends FilterOutputStream {
    MyOutputStream(OutputStream out) {
        super(out);
    }
}

final var out = new ByteArrayOutputStream();

try (final var os = new MyOutputStream(out)) {
    os.write(10);
    os.write(20);
    os.write(30);
}

System.out.println(Arrays.toString(out.toByteArray())); // [10, 20, 30]

OutputStreamで宣言されたメソッド

nullOutputStream

Java API 使用例 : OutputStream」をご参照ください。


関連記事

ページの先頭へ