写入标准输出vs写入文件

时间:2012-12-17 18:48:44

标签: java linux io

这类似于:

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秒)。为什么呢?

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();

您将看到文件的输出速度提高了十倍。