我預計,由於PrintStream的緩衝,由每個打印()後,添加刷新操作,速度表現應該顯著下降,但它並沒有在所有如下面的代碼片段所示。PrintStream的緩衝,但沖水不會降低性能和的BufferedOutputStream加速性能
此外,纏繞一個的BufferedOutputStream一個PrintStream的10倍以上,提高了性能 - 這意味着爲PrintStream不會被緩衝。
是爲PrintStream真的不緩衝,或者它有一個非常小的緩衝區,或者是有爲什麼它不提供從一個緩衝流預期的速度提高一些其他的解釋嗎?
// PrintStream is buffered but takes 4228ms to complete
long start = System.currentTimeMillis();
try (PrintStream ps = new PrintStream(new FileOutputStream("1.txt")))
{
for (int i = 0; i < 1_000_000; i++) {
ps.print(i + " ");
}
}
long stop = System.currentTimeMillis();
System.out.println(stop - start);
// PrintStream is buffered, but with auto-flush takes 4140ms to complete, no degraded speed implying flush did nothing
start = System.currentTimeMillis();
try (PrintStream os = new PrintStream(new FileOutputStream("1.txt")))
{
for (int i = 0; i < 1_000_000; i++) {
os.print(i + " ");
os.flush();
}
}
stop = System.currentTimeMillis();
System.out.println(stop - start);
// PrintStream is buffered explicitly as a BufferedOutputStream and runs quickly: 202ms
start = System.currentTimeMillis();
try (PrintStream os = new PrintStream(new BufferedOutputStream(new FileOutputStream("1.txt"))))
{
for (int i = 0; i < 1_000_000; i++) {
os.print(i + " ");
}
}
stop = System.currentTimeMillis();
System.out.println(stop - start);
@jtahlborn在源代碼中陳述我的_assumes_ PrintStream的問題_is_緩衝......我的問題是,爲什麼它像一個的BufferedOutputStream確實不imporve性能。 – Jonathan
猜我誤解了,我以爲你問是否緩衝。 – jtahlborn