当前位置: 首页 > 面试题库 >

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

时恩
2023-03-14
问题内容

我了解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);
    }
}

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


问题答案:

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

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

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



 类似资料:
  • 我明白扫描仪有什么好处,也明白什么时候使用扫描仪,什么时候使用Bufferedreader。我读到了一个不同的,但在一些类似的问题扫描器vs.BufferedReader null

  • 有人问我一个关于求两个数之间的公约数的问题。我能够使用“埃拉托色尼筛”找出逻辑方法,我正在运行我的代码。但是我的代码给出了一个意想不到的输出,它能够计算出no。指两个数之间的公约数。对于第一个输入,但对于其余的输入,它以某种方式继续与前一个值“内部循环j”,在该值处,它在第一个测试用例中停止;对于其他测试用例。 逻辑方法-->如果一个素数不。是给定两个NO的因子。然后,我们将检查每一个素数的倍数。

  • 在解决黑客级别的一个问题时,我面临着扫描器/Bufferedreader无法读取最后一个问题。因为它们提供的输入就像 因此,两个扫描器/BufferedReader都无法读取最后一行。如果输入类似,那么代码似乎可以正常工作。 (输入结束) 下面是我正在使用的示例代码。我知道我们需要在行的末尾有一个\r或\n来从scanner/bufferedreader读取行。但是任何人都可以提供解决这个问题的方

  • 当我运行这段代码并且调用图确实很大时,程序会打印到输出的最后一行,并在处被阻塞,尽管没有任何剩余内容。有人知道问题出在哪里吗?将调用图发送到错误流。我尝试执行,这样我就可以从文件中读取,但它抱怨有太多的位置参数。 奇怪的是,对于小尺寸的调用图,代码运行得很好。

  • 我试图分块读取输入流并写入文件以避免内存问题,我接收json格式的数据,并使用以下代码写入文件。 我的问题是,大多数json都写得很好,虽然其中一些包含损坏的数据,但我不确定我是否正确地将CharBuffer与BufferedReader一起使用,我观察到的另一件事是,对于少量数据,它正确地将CharBuffer写入文件,当我从服务器接收到更大的数据(大约2MB的输入流-不是很大)时,我通常会遇到

  • 我正在尝试读取文本文件并创建数组。使用文件的前2个值设置数组,这些值出现在第一行。然后将文件中的所有剩余项添加到数组中。由于某种原因,我的数组也总是为空。需要做哪些修正才能使其正常运行?