使用Java读取/解析控制台输入,Scanner和BufferedReader哪个更快?

5
我需要制作一个数据处理器,能够从 STDIN 处理超过 2.5MB/s 的输入,然后输出一个数字到 STDOUT。使用 BufferedReader 和数据类型的转换,还是使用 Scanner 和 nextInt() 或 nextFloat(),哪个更快?
实证测试结果:BufferedReader 和转换稍微快一点,但没有太大的差别。
谢谢!
2个回答

6
答案很可能是:从性能的角度来看,无论你从哪个方面做都没有关系。(而且没有人可以在控制台上以每秒2.5MB的速度输入!)如果包括从操作系统级别和其他地方读取控制台时发生的一切,将花费比解析字符更多的CPU周期来获取用户在控制台上输入的字节。如果您正在从文件(通过stdin)读取,则不再存在数量级的差异,但我仍然会对两种方法是否显着不同感到惊讶...总体而言。但最好的方法是尝试一下。编写一个粗略近似于您所做的基准测试,看哪种替代方案更快...并且速度提高了多少。(确保您测量的是总经过时间,而不仅仅是Java应用程序的用户空间CPU时间。)

3
没错,没有人能以2.5MB/s的速度将内容输入到控制台,但重定向的输入也会进入STDIO(标准输入输出流)。:P - dagilpe
@dagilpe - 但是STDIN并不是“控制台”。此外,我已经处理了那种情况。 - Stephen C

1

BufferedReader 读取流。而 Scanner 则将其输入拆分为令牌。

2.5MB/s 更适用于 BufferedReader。它具有比 Scanner 更大的缓冲区。8 比 1。

BufferedReader >>>>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接