所以我有一个要读入的文件,我知道如何设置数据。例如,我知道每个新行的第一个标记将是双重的。
我一直在使用Scanner并且只是使用scan.nextDouble()来读取double但是我被告知Double.parseDouble(scan.next())而不是加速了从中读取数据的过程文件从30秒减少到约5秒。
scan.nextInt()与Integer.parseInt(scan.next())的情况也是如此。
在我正在阅读的文件中,对于每行大约40,000行,它为int double int int。
那么是什么让它变得如此之快?
答案 0 :(得分:5)
这是因为scan.nextDouble()从以下Stream中找到最接近的Doublelike值。它无法确定下一个字符串值是否为doublelike值,例如
s =“abcde1234.5” scan.nextDouble(s)将为1234.5但Double.parseDouble(scan.next())将引发错误。
您可以在源代码中找到更多详细信息。
答案 1 :(得分:5)
除了简单地读入下一个标记并调用适当的解析器之外,扫描程序next<Type>
方法还在做其他工作。首先,他们检查令牌对该类型有效的正则表达式,然后按下它来处理特定于语言环境的位(例如组分隔符,小数点分隔符等),然后最终将其传递给解析器。
如果您确定您的输入符合您描述的确切格式,并且您不需要考虑来自其他区域设置等的输入所导致的任何潜在差异,那么请务必使用你被告知的优化。