写入到标准输出VS书面文件(Writing to standard out vs writing t

2019-10-17 12:39发布

这是类似的:

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

我很困惑,因为有两个相互矛盾的答案。 我写了一个简单的Java程序

 for(int i=0; i<1000000; i++){
       System.out.println(i);
 }

并与运行它/usr/bin/time -v java test来测量时间以输出到stdout,然后我尝试/usr/bin/time -v java test > file/usr/bin/time -v java > /dev/null 。 写入到控制台最慢(10秒)然后文件(6秒)和/dev/null是最快的(2秒)。 为什么?

Answer 1:

因为写入控制台需要刷新,每次的东西写在屏幕上,这需要时间。

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

和写入/dev/null任何地方都不会写什么,这需要更短的时间。



Answer 2:

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

你会看到,输出到文件变得快十倍。



文章来源: Writing to standard out vs writing to file
标签: java linux io