生のバイトを文字に変換する必要があるため、BufferedReaderの使用(FileReaderのラッピング)はBufferedInputStreamの使用(FileInputStreamのラッピング)よりも大幅に遅くなることを理解しています。しかし、なぜそんなに遅いのかわかりません!これが私が使用している2つのコードサンプルです:
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(filename));
try {
byte[] byteBuffer = new byte[bufferSize];
int numberOfBytes;
do {
numberOfBytes = inputStream.read(byteBuffer, 0, bufferSize);
} while (numberOfBytes >= 0);
}
finally {
inputStream.close();
}
と:
BufferedReader reader = new BufferedReader(new FileReader(filename), bufferSize);
try {
char[] charBuffer = new char[bufferSize];
int numberOfChars;
do {
numberOfChars = reader.read(charBuffer, 0, bufferSize);
} while (numberOfChars >= 0);
}
finally {
reader.close();
}
さまざまなバッファサイズを使用してテストを試しましたが、すべて150メガバイトのファイルです。結果は次のとおりです(バッファサイズはバイト単位、時間はミリ秒単位)。
Buffer Input
Size Stream Reader
4,096 145 497
8,192 125 465
16,384 95 515
32,768 74 506
65,536 64 531
ご覧のとおり、BufferedInputStreamの最速時間(64ミリ秒)は、BufferedReaderの最速時間(465ミリ秒)の7倍です。上で述べたように、大きな違いはありません。しかし、これだけの違いは不合理に思えます。
私の質問は次のとおりです。BufferedReaderのパフォーマンスを改善する方法、または代替メカニズムについて誰かが提案を持っていますか?