1

这类似于:

打印到控制台与写入文件(速度)

我很困惑,因为有两个相互矛盾的答案。我写了一个简单的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 秒),然后/dev/null是文件(6 秒),最快(2 秒)。为什么?

4

2 回答 2

5

因为每次写入内容到控制台都需要刷新屏幕,这需要时间。

写入文件需要在磁盘上写入字节,这需要时间,但比刷新屏幕的时间要少。

并且写入/dev/null不会在任何地方写任何东西,这需要更少的时间。

于 2012-12-17T18:53:55.797 回答
0

System.out.println 的另一个问题是 System.out 默认处于自动刷新模式,println 实际上会关闭缓冲。试试这个

    PrintWriter a = new PrintWriter(System.out, false);
    for (int i = 0; i < 1000000; i++) {
        a.println(i);
    }
    a.flush();

你会看到输出到文件的速度提高了十倍。

于 2012-12-17T19:20:36.310 回答