我知道System.out是缓冲的。在明确刷新或程序终止之前,它不会将输出打印到终端。
我写了下面的程序来测试我的理解。 我想我的程序输出会在程序终止时打印,因为我没有明确地刷新流。 但是一旦执行打印就会打印输出,然后程序进入5秒钟。
有人可以提出原因。
class PrintandSleep {
public static void main(String args[]) throws InterruptedException{
System.out.print("xyz");
Thread.sleep(5000);
}
}
答案 0 :(得分:2)
原因是编写器的标志自动刷新设置为true。
public PrintStream(OutputStream out, boolean autoFlush, String encoding)
在我们调用write(String)
的情况下,我们也会调用flush()
。
版本8的代码:
java.io.PrintStream
public void print(String s) {
if (s == null) {
s = "null";
}
write(s);
}
private void write(String s) {
try {
synchronized (this) {
ensureOpen();
textOut.write(s);
textOut.flushBuffer();
charOut.flushBuffer();
if (autoFlush && (s.indexOf('\n') >= 0))
out.flush();
}
}
catch (InterruptedIOException x) {
Thread.currentThread().interrupt();
}
catch (IOException x) {
trouble = true;
}
}
当您无法确定发生了什么时,请查看代码。