InputStream.transferTo()
InputStreamをOutputStreamへ1回の呼び出しでコピーする。
コード比較
✕ Java 8
byte[] buf = new byte[8192];
int n;
while ((n = input.read(buf)) != -1) {
output.write(buf, 0, n);
}
✓ Java 9+
input.transferTo(output);
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
1行で完結
読み書きループ全体を1つのメソッド呼び出しで置き換えます。
最適化済み
内部バッファサイズはパフォーマンスのためにチューニングされています。
バグなし
バッファ管理でのオフバイワンエラーが起きません。
旧来のアプローチ
手動コピーループ
モダンなアプローチ
transferTo()
JDKバージョン
9
難易度
初級
JDKサポート
InputStream.transferTo()
利用可能
JDK 9(2017年9月)以降、広く利用可能
仕組み
transferTo()は入力ストリームからすべてのバイトを読み取り、出力ストリームに書き込みます。バッファ管理もループも不要です。最適化された内部バッファを使用します。
関連ドキュメント