为什么从文件输入越来越快?

时间:2017-03-30 02:33:00

标签: java input

我有10个文件,每个文件是500M。

我使用Long randomValue = Math.abs(random.nextLong());生成这些文件。文件中的每一行都是randomValue。一个文件大约有26374000行。

当我在另一个程序中逐个读取这些文件并计算成本时间时,我发现输入变得更快。为什么?

read 0 file 26373542 lines time : 27046ms
read 1 file 26373627 lines time : 24155ms
read 2 file 26373676 lines time : 19227ms
read 3 file 26373768 lines time : 22875ms
read 4 file 26373681 lines time : 20813ms
read 5 file 26373774 lines time : 18297ms
read 6 file 26373787 lines time : 10556ms
read 7 file 26373557 lines time : 11614ms
read 8 file 26373566 lines time : 9751ms
read 9 file 26373653 lines time : 13372ms

这是我的计划:

Long start = new Date().getTime();
FileReader fr = new FileReader(inFile);
BufferedReader br = new BufferedReader(fr);
String num;
while((num = br.readLine()) != null) {
    sorted[j++] = Long.parseLong(num);
    count++;
}
Long end = new Date().getTime();
System.out.println("read " + i + " file " + j + "lines time : " + (mid - start) + "ms");
br.close();
fr.close();

1 个答案:

答案 0 :(得分:0)

一些事情:

  1. 正如评论中所指出的那样,JVM通常会在warmed up之后提高性能 - 尽管从您的代码段开始不清楚是否每个文件都启动了一个新的JVM或不。
  2. 您正在从磁盘读取文件。目前尚不清楚它是旋转磁盘还是SSD - 它们具有截然不同的性能特征。尽管如此,从磁盘读取数据时存在大量变量,这使得难以对您要测试的基础算法进行直接基准测试,除非您先将数据加载到内存中然后然后命中从你的秒表开始。
  3. 您的文件不相同(行数不同,内容可能不同等)
  4. 一旦您考虑了上述情况,您可能需要考虑是否已经做了足够的可重复测试,测试持续时间是否足够长等等,然后再得出关于性能的太多具体结论。