今日の初めに退屈していたので、Javaでのバッファリングされたバイトストリームとバッファリングされていないバイトストリームの相対的なパフォーマンスについて少し考え始めました。簡単なテストとして、適度に大きなテキストファイルをダウンロードし、ファイルをコピーするときにバッファリングされたストリームが与える影響を判断するための短いプログラムを作成しました。4つのテストが実行されました。
- バッファリングされていない入力および出力バイトストリームを使用してファイルをコピーします。
- バッファリングされた入力ストリームとバッファリングされていない出力ストリームを使用してファイルをコピーします。
- バッファリングされていない入力ストリームとバッファリングされた出力ストリームを使用してファイルをコピーします。
- バッファリングされた入力ストリームと出力ストリームを使用してファイルをコピーします。
当然のことながら、バッファリングされた入力ストリームと出力ストリームを使用すると、バッファリングされていないストリームを使用するよりも桁違いに高速になります。ただし、(少なくとも私にとって)本当に興味深いのは、ケース2と3の速度の違いでした。いくつかのサンプル結果は次のとおりです。
Unbuffered input, unbuffered output
Time: 36.602513585
Buffered input, unbuffered output
Time: 26.449306847
Unbuffered input, buffered output
Time: 6.673194184
Buffered input, buffered output
Time: 0.069888689
興味のある方は、ここGithubでコードを入手できます。ケース2と3の時間が非常に非対称である理由を誰かが明らかにすることができますか?