前回の実験で、DeflaterOutputStreamとBufferedOutputStreamの組み合わせ方によってパフォーマンスが大きく異なることがわかりました。今回はこの遅延の原因がDeflaterOutputStreamの実装に起因することを確認し、なぜBufferedOutputStreamでデコレートすべきなのかを考えます。 遅延の正体はI/O待ちではない まず遅延の正体が何であるかを切り分けましょう。入出力処理でボトルネックになりがちなのはI/O待ちですので、これを疑ってみます。 最も簡単な検証は、/dev/null にリダイレクトするイメージで「ファイルに書き込まない」ストリームを作成し、I/O待ちを完全に省いてしまうことです。これで速くなればI/O待ちが遅延の正体であると言えます。 必要なコードは以下のようなストリームクラスだけ。手軽に確認できます。 // 受け取ったデー