Java 写入标准输出与写入文件
这类似于: 我很困惑,因为有两个相互矛盾的答案。我写了一个简单的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秒)。为什么?因为写入控制台需要在每次写入内容时刷新屏幕,这需要时间 写入文件需要在磁盘上写入字节,这需要时间
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。