为什么某些流需要被刷新(
每当有人使用
最近我向几位程序员提出了这个问题,其中一些人认为Java中有一些后台处理来自动刷新
像这样的事情让我想知道简单地调用
FileOutputStream
和来自Sockets的流),而标准输出流不需要?每当有人使用
System.out
PrintStream
对象,无论是调用println()
还是write()
,他们都没有刷新该流。然而,其他程序员习惯于使用PrintStream
/PrintWriter
与其他流一起调用flush()
。最近我向几位程序员提出了这个问题,其中一些人认为Java中有一些后台处理来自动刷新
System.out
流,但我找不到任何相关文档。像这样的事情让我想知道简单地调用
System.out.println()
是否跨平台,因为某些系统可能需要您刷新该流。
autoFlush
为真时才有效,但是它是真的吗?我找不到有关System.out
的autoFlush
值的任何文档... - user85421System.out
和System.err
绑定及刷新的问题,取决于启动JVM和启动主类应用程序的系统。当您使用java
二进制文件来启动一个类时,System.out
被初始化为类似于new PrintStream(new FileOutputStream(FileDescriptor.out), true, System.getProperty("file.encoding"))
的内容,但其他JVM可能会不同。显然,嵌入小应用程序的JVM会执行不同的操作。 - Mike Samuelcmd
中,使用隐式的'\n'
或显式的.flush()
刷新输出是有效的,但在Windows的mintty
(也称为MSYS2终端)中则不行。 - veganaiZe"\r\n"
吗?也就是说,写入System.lineSeparator()
然后再刷新,这样可靠吗? - Mike Samuel