バイナリファイルを読み込んでいるコードをプロファイリングしていました。ロード時間は約15秒でした。JavaのBufferedInputStreamの最適サイズを調べる
ロード時間の大部分は、バイナリデータをロードしていたメソッドからのものでした。
私は私のDataInputStreamを作成するには、次のコードを持っていた:
is = new DataInputStream(
new GZIPInputStream(
new FileInputStream("file.bin")));
そして、私はこれにそれを変更:
is = new DataInputStream(
new BufferedInputStream(
new GZIPInputStream(
new FileInputStream("file.bin"))));
を、私はこの小さな変更をしたので、後にロードするコードは、15秒から行ってきました4.
しかし、私は、BufferedInputStreamに2つのコンストラクタがあることを発見しました。もう一方のコンストラクタでは、バッファサイズを明示的に定義できます。
私は2つの質問を持っている:
にBufferedInputStreamに選ばれ、それが理想的ですどのサイズ- ?そうでない場合は、どのようにバッファの最適なサイズを見つけることができますか?バイナリ検索を行うコードをすばやく書くべきですか?
- これはBufferedInputStreamを使用する最も良い方法ですか?私はもともとGZIPInputStream内にそれを持っていたが、無視できる利益があった。私はコードが今何をしているのかは、ファイルバッファを満たす必要があるたびに、GZIP入力ストリームが通過し、xバイト(xはバッファのサイズ)をデコードすると仮定しています。 GZIPInputStreamを完全に省略するだけの価値はありますか?それは間違いなく必要ですが、私のファイルサイズは使用時に劇的に減少します。
ディスクから読み込むときに、GZIPInputStreamに64Kのバッファを試すことをお勧めします。私は1 MBを使用しています。これは必要以上に多い可能性があります。 ;) –