Java : OutputStream - API使用例

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


概要

この抽象クラスは、バイト出力ストリームを表現するすべてのクラスのスーパー・クラスです。 出力ストリームは、出力バイトを受け付けて、特定の受け手に送ります。

クラス構成

final var file = Path.of("R:", "java-work", "test.data");
System.out.println(file); // R:\java-work\test.data

try (final var os = Files.newOutputStream(file)) {
    os.write(10);
    os.write(20);
    os.write(30);
}

final var bytes = Files.readAllBytes(file);
System.out.println(Arrays.toString(bytes)); // [10, 20, 30]

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

※ByteArrayOutputStream など、一部 close しなくても問題ないクラスもあります。

コンストラクタ

OutputStream ()

サブクラスが呼び出すためのコンストラクタ。

独自にサブクラスを作ることは少ないと思いますので、コード例は割愛します。

メソッド

void close ()

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

可能であれば try-with-resources文 を使うことをおすすめします。

final var file = Path.of("R:", "java-work", "test.data");
System.out.println(file); // R:\java-work\test.data

try (final var os = Files.newOutputStream(file)) {
    os.write(123);
}

final var bytes = Files.readAllBytes(file);
System.out.println(Arrays.toString(bytes)); // [123]
// try-with-resources文を使わない例です。
final var file = Path.of("R:", "java-work", "test.data");
System.out.println(file); // R:\java-work\test.data

final var os = Files.newOutputStream(file);
try {
    os.write(123);
} finally {
    os.close();
}

final var bytes = Files.readAllBytes(file);
System.out.println(Arrays.toString(bytes)); // [123]

void flush ()

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

final var file = Path.of("R:", "java-work", "test.data");
System.out.println(file); // R:\java-work\test.data

try (final OutputStream os = new BufferedOutputStream(Files.newOutputStream(file))) {

    os.write(123);
    System.out.println(Arrays.toString(Files.readAllBytes(file))); // []

    os.flush();
    System.out.println(Arrays.toString(Files.readAllBytes(file))); // [123]
}

static OutputStream nullOutputStream ()

すべてのバイトを破棄する新規OutputStreamを返します。

final byte[] b = {1, 2, 3};
final var os = OutputStream.nullOutputStream();

// なにも起きません。
os.write(123);
os.write(b);
os.write(b, 0, 2);
os.flush();

os.close();

// closeの後は例外発生
//os.write(123); // IOException: Stream closed

void write (byte[] b)

指定されたバイト配列のb.lengthバイトをこの出力ストリームに書き込みます。

final var file = Path.of("R:", "java-work", "test.data");
System.out.println(file); // R:\java-work\test.data

try (final var os = Files.newOutputStream(file)) {

    os.write(new byte[]{10, 20});

    final var bytes1 = Files.readAllBytes(file);
    System.out.println(Arrays.toString(bytes1)); // [10, 20]

    os.write(new byte[]{30, 40, 50});

    final var bytes2 = Files.readAllBytes(file);
    System.out.println(Arrays.toString(bytes2)); // [10, 20, 30, 40, 50]
}

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

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

final var file = Path.of("R:", "java-work", "test.data");
System.out.println(file); // R:\java-work\test.data

final byte[] b = {10, 20, 30, 40, 50};

try (final var os = Files.newOutputStream(file)) {

    os.write(b, 0, 2);

    final var bytes1 = Files.readAllBytes(file);
    System.out.println(Arrays.toString(bytes1)); // [10, 20]

    os.write(b, 2, 3);

    final var bytes2 = Files.readAllBytes(file);
    System.out.println(Arrays.toString(bytes2)); // [10, 20, 30, 40, 50]
}

abstract void write (int b)

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

書き込まれるバイトは、パラメータ b の下位8ビットです。

final var file = Path.of("R:", "java-work", "test.data");
System.out.println(file); // R:\java-work\test.data

try (final var os = Files.newOutputStream(file)) {

    os.write(1);

    final var bytes1 = Files.readAllBytes(file);
    System.out.println(Arrays.toString(bytes1)); // [1]

    os.write(127);

    final var bytes2 = Files.readAllBytes(file);
    System.out.println(Arrays.toString(bytes2)); // [1, 127]

    os.write(128);

    final var bytes3 = Files.readAllBytes(file);
    System.out.println(Arrays.toString(bytes3)); // [1, 127, -128]

    os.write(129);

    final var bytes4 = Files.readAllBytes(file);
    System.out.println(Arrays.toString(bytes4)); // [1, 127, -128, -127]

    os.write(255);

    final var bytes5 = Files.readAllBytes(file);
    System.out.println(Arrays.toString(bytes5)); // [1, 127, -128, -127, -1]

    os.write(256);

    final var bytes6 = Files.readAllBytes(file);
    System.out.println(Arrays.toString(bytes6)); // [1, 127, -128, -127, -1, 0]

    os.write(257);

    final var bytes7 = Files.readAllBytes(file);
    System.out.println(Arrays.toString(bytes7)); //[1, 127, -128, -127, -1, 0, 1]
}

関連記事

ページの先頭へ