小编典典

从输入读取内容时,为什么Scanner比BufferedReader慢?

java

我了解Scanner的优点,以及何时使用Scanner和BufferedReader。我读了一个不同的问题,但在一些类似的问题中,它的问题是Scannervs. BufferedReader

当我从输入中读取内容时,为什么Scanner这么慢? 我认为这与Scanner中有一个小的缓冲区有关,但是在这里我迷路了。最初的问题来自
Codechef,但我对该解决方案不感兴趣。

这是具有给定输入的代码示例:输入:

  • 7 3
  • 1个
  • 51
  • 966369
  • 7
  • 9
  • 999996
  • 1个

和代码

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] s = br.readLine().split(" "); 
        int numberOfLines = Integer.parseInt(s[0]);
        int divideNumber = Integer.parseInt(s[1]);
        int count = 0;

        for (int i = 0; i < numberOfLines; i++) {
            String number = br.readLine();
            if (number.length() < 11) {
                int num = Integer.parseInt(number);
                if (num % divideNumber == 0) {
                    count++;
                }
            } 
        }
        System.out.println(count);
    }
}

如果我用扫描仪读取相同的代码,则速度很慢。


阅读 387

收藏
2020-09-28

共1个答案

小编典典

上层的类/方法通常比下层的类/方法慢。 您可能会以同样的方式询问为什么搜索regular expressions速度比使用
搜索慢String.indexOf()。实际上,我在SO上已经看到过这样的问题。

您的类/方法越专业,它可以执行的越好。 例如,它仅做一件简单的事情,但快速有效地做到了。
更通用的类/方法可以做10-20种不同的事情,因此它们 功能更强大,但因此速度较慢。

我在这里一般来说,我还没有ScannerBufferedReader自己比较。

2020-09-28