我想打印100万行到stdout。
System.out.println(result);
或者
PrintWriter out = new PrintWriter(System.out);
out.println(result);
out.flush();
为了获得更好的性能(速度方面),我应该使用哪一个?为什么?
- 的修改 - BufferedWriter怎么样?
答案 0 :(得分:0)
在不同的输出流中包装System.out并不会产生任何影响。它只会调用相同的方法。您的局限性在于创建数百万个小对象以及控制台接收,保存和显示所有内容的能力。
此外,设计一个简单的测试很容易。
public static void main(String[] args) {
System.out.println();
long start = 0L;
start = System.currentTimeMillis();
for(int i = 0; i <= 999999; i++)
System.out.println(i);
long printStreamTime = System.currentTimeMillis() - start;
PrintWriter writer = new PrintWriter(System.out);
System.gc();
try {
Thread.sleep(1000L);
} catch(InterruptedException ie) {}
start = System.currentTimeMillis();
for(int i = 0; i <= 999999; i++)
writer.println(i);
long printWriterTime = System.currentTimeMillis() - start;
System.out.println();
System.out.println("PrintStream time = " + (printStreamTime / 1000.0));
System.out.println("PrintWriter time = " + (printWriterTime / 1000.0));
}
我两个人都得到了49秒。几乎相同。
如果您想要速度,请写入文件并将其打开。
答案 1 :(得分:0)
PrintWritter可以提供更好的性能,尽管在较小的程序中时间差异并不明显。 但是随着要打印的行数增加而变得很明显。
我将这些代码片段的执行时间用于测试。 System.out.println(i)
class Sprint{
public static void main(String[] args) {
int n=10000000;
for(int i=0;i<n;i++){
System.out.println(i);
}
}
}
out.println(i);
import java.io.*;
class Pprint{
public static void main(String[] args) {
PrintWriter out = new PrintWriter(System.out);
int n=10000000;
for(int i=0;i<n;i++){
out.println(i);
}
out.flush();
}
}
我使用n = 10 到 10 ^ 7 ,并且每个n都执行了两次。 n的值超过10 ^ 3后,性能有明显的差异。
答案 2 :(得分:-1)
我的建议是使用PrintWriter以获得更好的时间性能,尽管时间差异在较小的程序中并不重要。对于较大的程序,您可能会注意到显着差
我已用System.out.println
替换并运行PrintWriter
,执行时间从0.06秒减少到0.05秒。
以下是类似问题的链接:https://discuss.codechef.com/questions/62586/systemoutprintln-vs-printwriter
希望有所帮助:)