BufferedReaderとScannerの速度比較とその原因


なぜBufferedReaderの方がScannerよりも速いのかについて、以下の理由があります。

  1. バッファリング: 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();
    }
}
  1. 文字の解析: Scannerは、入力データを解析するために正規表現を使用します。正規表現の処理は一般的に負荷が高いため、Scannerのパフォーマンスに影響を与えます。一方、BufferedReaderはテキストを行単位で読み込むだけで、解析の必要がありません。

  2. 不要なトークンのスキップ: Scannerはデフォルトで空白文字を区切り文字として使用します。これにより、不要なトークン(空白文字など)がスキップされるため、パフォーマンスが低下します。一方、BufferedReaderでは、テキストをそのまま読み込むため、トークンのスキップが不要です。

以上の要因により、BufferedReaderはScannerよりも高速な入力処理が可能となります。

ただし、速度の違いは入力データのサイズや使用方法によって異なる場合があります。特定のシナリオでどちらが最適かを判断するには、実際の使用ケースで両者を比較して検証することが重要です。