当考虑性能时如何从文件中读取整数?

2024-04-28

我正在 CodeEval 上执行一些任务。基本上任务非常简单:“打印出从文件中读取的所有整数的总和”。

我的解决方案如下:

import java.io.File;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.FileReader;

public class SumIntegersFromFile {

    public static void main(String args[]) throws IOException{

        File file = new File(args[0]);
         BufferedReader br = new BufferedReader( new FileReader(file));
         String line;
         int i=0;
         while((line=br.readLine())!=null){
            int k = Integer.parseInt(line);
             i+=k;
         }
         br.close();
         System.out.println(i);
    }
}

但我被告知从性能的角度来看这个解决方案并不是最佳的。

该代码基于问题中的建议读取文本文件的最佳方法 https://stackoverflow.com/questions/4716503/best-way-to-read-a-text-file。这里唯一的区别是我正在读取整数而不是字符串。

在 Java 中从文件读取整数的最高效的方法是什么?


除非您被明确告知,否则您不应该假设总数适合int。尝试改变类型i to a long,甚至是一个BigInteger,看看这是否会对您的分数产生影响。

你可以尝试做同样的事情k(并使用Long.parseLong(line))。这将取决于问题的确切措辞,但也许各个值可能会超出某个值的限制。int too.

还有一件事......这个问题,正如您所说的那样,只是说您应该将所有整数相加。这就留下了可能存在非整数的行,在这种情况下你应该跳过它们,而不是抛出一个NumberFormatException(这就是您的代码目前要做的事情)。

(想必您已经被告知这是每行一个条目......)

但是,如果您想充分发挥性能,则需要以二进制形式读取文件,而不是逐行读取:将每一行变成一个String就是太贵了。有关如何执行此操作的详细说明可以在这个关于从文本文件中求和整数的问题 https://stackoverflow.com/questions/25606833/fastest-way-to-sum-integers-in-text-file.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当考虑性能时如何从文件中读取整数? 的相关文章

随机推荐