1. ホーム
  2. java

[解決済み] Java InputStreamの内容をOutputStreamに書き出す簡単な方法

2022-03-21 19:22:34

質問

今日、驚いたことに InputStreamOutputStream をJavaで作成しました。もちろん、バイトバッファコードを書くのは難しくありませんが、私の人生を楽にする(そしてコードを明確にする)何かが欠けているのではないかと思っています。

そこで InputStream inOutputStream out のように、もっと簡単な書き方はないでしょうか?

byte[] buffer = new byte[1024];
int len = in.read(buffer);
while (len != -1) {
    out.write(buffer, 0, len);
    len = in.read(buffer);
}

解決方法は?

ジャバ9

Java 9以降。 InputStream というメソッドが用意されています。 transferTo を次のようなシグネチャで記述します。

public long transferTo(OutputStream out) throws IOException

として ドキュメント と記載されています。 transferTo になります。

この入力ストリームからすべてのバイトを読み込み、そのバイトを 与えられた出力ストリームを、読み込んだ順に並べる。戻り値として、この 入力ストリームはストリームの終端となる。このメソッドは のどちらかのストリームを使用する。

このメソッドは、読み込みを無制限にブロックすることができます。 入力ストリームに書き込んだり、出力ストリームに書き込んだりすることができます。この場合の動作は 入出力ストリームが非同期にクローズされた場合や 転送中にスレッドが中断された場合、高度に入力および出力 ストリームに依存するため、指定されません。

そのため、Javaのコンテンツを書き込むには InputStreamOutputStream と書くことができます。

input.transferTo(output);