Java 写入标准输出与写入文件

Java 写入标准输出与写入文件,java,linux,io,Java,Linux,Io,这类似于: 我很困惑,因为有两个相互矛盾的答案。我写了一个简单的java程序 for(int i=0; i<1000000; i++){ System.out.println(i); } for(int i=0;i file和/usr/bin/time-v java>/dev/null。写入控制台最慢(10秒),然后是文件(6秒),而/dev/null最快(2秒)。为什么?因为写入控制台需要在每次写入内容时刷新屏幕,这需要时间 写入文件需要在磁盘上写入字节,这需要时间

这类似于:

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

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

for(int i=0;i file
/usr/bin/time-v java>/dev/null
。写入控制台最慢(10秒),然后是文件(6秒),而
/dev/null
最快(2秒)。为什么?

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

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


写入
/dev/null
不会在任何地方写入任何内容,所需时间要少得多。

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

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


写入
/dev/null
不会在任何地方写入任何内容,这需要的时间要少得多。

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();
PrintWriter a=新的PrintWriter(System.out,false);
对于(int i=0;i<1000000;i++){
a、 println(i);
}
a、 冲洗();

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

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();
PrintWriter a=新的PrintWriter(System.out,false);
对于(int i=0;i<1000000;i++){
a、 println(i);
}
a、 冲洗();

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

尝试最小化控制台窗口尝试最小化控制台窗口+1当您向这些输出设备写入大量数据时,它实际上必须处理文本,并且您的程序必须等待它处理。例如,当程序生成文本的速度过快时,它将被迫执行对消费者来说,放慢速度。要读取/写入的设备通常比Java中的操作更重要。+1当您向这些输出设备写入大量数据时,它实际上必须对文本进行处理,而您的程序必须等待它进行处理。也就是说,当程序生成文本的速度过快时,它被迫放慢速度以进行消费r、 读取/写入到的设备通常比您在Java中所做的更重要。啊,我明白了。如果在System.out上有一个打开/关闭缓冲的标志,那会很方便。这就是为什么要使用日志API的原因之一。啊,我明白了。如果在System.out上有一个打开/关闭缓冲的标志,那会很方便。这是w使用hy日志api。