java - 从 Java 中读取 System.in 的最快方法是什么?

标签 java optimization inputstream stdin

我在使用 Scanner(System.in) 时从标准中读取由空格或换行符分隔的一堆整数。

在 Java 中有没有更快的方法来做到这一点?

最佳答案

Is there any faster way of doing this in Java?

是的。扫描仪相当慢(至少根据我的经验)。

如果您不需要验证输入,我建议您只需将流包装在 BufferedInputStream 中并使用 String.split/Integer.parseInt 之类的东西。


一个小比较:

使用此代码读取 17 兆字节(4233600 个数字)

Scanner scanner = new Scanner(System.in);
while (scanner.hasNext())
    sum += scanner.nextInt();

占用我的机器 3.3 秒。而这段代码

BufferedReader bi = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = bi.readLine()) != null)
    for (String numStr: line.split("\\s"))
        sum += Integer.parseInt(numStr);

花了 0.7 秒

通过进一步弄乱代码(使用 String.indexOf/String.substring 迭代 line),您可以将其降低到大约0.1 秒很容易,但我想我已经回答了你的问题,我不想把它变成一些代码高尔夫。

关于java - 从 Java 中读取 System.in 的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7049011/

相关文章:

java - 从数组中删除第一个元素的最佳方法是什么?

java - 整个程序中的独特任务

php - 如何优化或组合这些 MySQL 查询?

java - InputStream 的问题

java - 如何打印程序中先前输入的文本文件的行

java - 存储 String 数组和搜索的所有组合

java.lang.NoSuchMethodError : No static method zzb(ZLjava/lang/Object;)V in class Lcom/google/android/gms/common/internal/zzaa; or its super classes 错误

java - RxJava : OnErrorFailedException. 确定正确原因

database - 数据库在 RAM 中运行的速度有多快?

java - 将 InputStream 转换为 BufferedReader