なぜBufferedReaderの方がScannerよりも速いのかについて、以下の理由があります。
- バッファリング: BufferedReaderは、入力データを内部バッファに一度に読み込むため、データの読み取りが高速化されます。一方、Scannerはデフォルトではバッファリングされず、入力ストリームから必要なデータを都度読み込むため、パフォーマンスが低下します。Scannerでもバッファリングを有効にすることは可能ですが、明示的に指定する必要があります。
例: BufferedReaderの使用例
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
String line;
while ((line = reader.readLine()) != null) {
// ファイルから一行ずつ読み込む処理
}
reader.close();
}
}
-
文字の解析: Scannerは、入力データを解析するために正規表現を使用します。正規表現の処理は一般的に負荷が高いため、Scannerのパフォーマンスに影響を与えます。一方、BufferedReaderはテキストを行単位で読み込むだけで、解析の必要がありません。
-
不要なトークンのスキップ: Scannerはデフォルトで空白文字を区切り文字として使用します。これにより、不要なトークン(空白文字など)がスキップされるため、パフォーマンスが低下します。一方、BufferedReaderでは、テキストをそのまま読み込むため、トークンのスキップが不要です。
以上の要因により、BufferedReaderはScannerよりも高速な入力処理が可能となります。
ただし、速度の違いは入力データのサイズや使用方法によって異なる場合があります。特定のシナリオでどちらが最適かを判断するには、実際の使用ケースで両者を比較して検証することが重要です。