I/O 初級

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
難易度
初級
InputStream.transferTo()
利用可能

JDK 9(2017年9月)以降、広く利用可能

transferTo()は入力ストリームからすべてのバイトを読み取り、出力ストリームに書き込みます。バッファ管理もループも不要です。最適化された内部バッファを使用します。

共有 𝕏 🦋 in