为什么与 BufferedReader 相比,scanner 类需要很长时间 [已关闭]

why scanner class take long time as compare to BufferedReader [closed]

提问人:Adarsh Dhakad 提问时间:4/24/2021 最后编辑:Adarsh Dhakad 更新时间:6/4/2021 访问量:182

问:


编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将有助于其他人回答这个问题。

2年前关闭。

在java编程中,有三个类(StringTokenizer、Scanner、BufferedReader)来获取输入。为什么 Scanner 与 bufferereader 和 DataInputStream 相比需要很长时间。

扫描器

  Scanner s = new Scanner(System.in);
    int n = s.nextInt();

为什么 BufferedReader 速度很快

    BufferedReader br = new BufferedReader(
        new InputStreamReader(System.in));

    StringTokenizer st
        = new StringTokenizer(br.readLine());
    int n = Integer.parseInt(st.nextToken());
Java 算法 java.util.scanner bufferedreader

评论

1赞 AKSingh 4/25/2021
我可以回答你的C++与Java竞争编码问题。但是,这将是我的意见,它不完全是一个编码问题,因此它不适合 SO。

答:

2赞 2 revsHovercraft Full Of Eels #1

您的扫描仪从输入流中读取较小的信息位,一次读取一个,没有缓冲,并且此过程很慢,因为该过程中最慢的步骤(从输入流读取)必须多次完成。

使用 Buffered input 的全部意义在于,通过减少从文件和缓冲区中读取大量数据的次数,然后根据需要从代码中的缓冲区中提取数据,从而实现更省时的读取。这样,从输入流读取的瓶颈就大大减少了。

你试过吗:

Scanner scan = new Scanner(new BufferedInputStream(System.in));

如果是这样,结果是什么?

评论

0赞 Adarsh Dhakad 4/24/2021
扫描程序扫描 = new Scanner(new BufferedInputStream(System.in));这也给了我运行时错误
1赞 Hovercraft Full Of Eels 4/30/2021
@Andrew是的,但不幸的是,我现在不能,因为我在手机上
0赞 Andrew Thompson 5/1/2021
NVM - 问题已重新打开,我的答案已添加。:)