【发布时间】:2011-11-24 05:05:51
【问题描述】:
我必须制作一个能够处理来自 STDIN 的超过 2.5MB/s 输入的数据处理器,并将一个数字输出到 STDOUT。使用 BufferedReader 然后转换为数据类型或 Scanner 和 nextInt() 或 nextFloat() 哪个更快?
实证测试结果:BufferedReader 和转换稍微快一点,但没什么太大意义。
谢谢!
【问题讨论】:
我必须制作一个能够处理来自 STDIN 的超过 2.5MB/s 输入的数据处理器,并将一个数字输出到 STDOUT。使用 BufferedReader 然后转换为数据类型或 Scanner 和 nextInt() 或 nextFloat() 哪个更快?
实证测试结果:BufferedReader 和转换稍微快一点,但没什么太大意义。
谢谢!
【问题讨论】:
答案很可能是无论从性能的角度来看,您采用哪种方式都可以。 (而且没有人可以在控制台上以每秒 2.5Mb 的速度打字!)
如果您在从控制台读取时包括在操作系统级别和其他地方发生的所有事情,数量级将花费更多的 CPU 周期来获取用户在控制台上键入的字节数用于解析字符。如果您正在从文件中读取(通过标准输入),我们不再谈论数量级差异,但如果这两种方法有显着差异......总体而言,我仍然会感到惊讶。
但您能做的最好的事情就是尝试一下。编写一个与您正在做的事情大致相似的基准测试不应该花费超过几分钟的时间,并查看哪个替代方案更快......以及速度快多少。 (确保测量总运行时间,而不仅仅是 Java 应用程序的用户空间 CPU 时间。)
【讨论】:
BufferedReader 读取流。而Scanner 将其输入分解为令牌。
2.5MB/s 更适合BufferedReader。它的缓冲区比Scanner 大。 8比1
BufferedReader >>>>
【讨论】: