这类似于:
Printing to the console vs writing to a file (speed)
我很困惑,因为有两个相互矛盾的答案。我写了一个简单的java程序
for(int i=0; i<1000000; i++){
System.out.println(i);
}
并使用/usr/bin/time -v java test
运行以测量输出到标准输出的时间,然后我尝试了/usr/bin/time -v java test > file
和/usr/bin/time -v java > /dev/null
。写入控制台最慢(10秒)然后文件(6秒)和/dev/null
最快(2秒)。为什么呢?
答案 0 :(得分:5)
因为写入控制台需要在每次写入内容时刷新屏幕,这需要时间。
写入文件需要在磁盘上写入字节,这需要时间,但刷新屏幕的时间要少。
写入/dev/null
不会在任何地方写任何东西,这会花费更少的时间。
答案 1 :(得分:0)
System.out.println的另一个问题是System.out默认处于autoflush模式,println实际上会关闭缓冲。试试这个
PrintWriter a = new PrintWriter(System.out, false);
for (int i = 0; i < 1000000; i++) {
a.println(i);
}
a.flush();
您将看到文件的输出速度提高了十倍。