Java System.in/out/err是否始终打开?
Javadoc说,Java System.in/out/err是否始终打开?,java,io,system.out,system.in,system.err,Java,Io,System.out,System.in,System.err,Javadoc说,in、out和err已经“打开”,我只是想知道它们在程序完成后会关闭吗?如果没有,是否与使用后关闭任何I/O流引用的做法相矛盾?System.in/out/err这些类由JVM实例化,而不是由我们实例化。 因此JVM将负责关闭它们。stdin、stdout和stderr在很大程度上是一个Unix概念,但其他操作系统(如Windows)也复制了这个概念。这些由系统维护,通常不关闭它们 但是,您可以关闭它们,甚至在fork()程序时必须关闭它们,这是Unix将程序从命令行分离并在后
in
、out
和err
已经“打开”,我只是想知道它们在程序完成后会关闭吗?如果没有,是否与使用后关闭任何I/O流引用的做法相矛盾?System.in/out/err这些类由JVM实例化,而不是由我们实例化。
因此JVM将负责关闭它们。
stdin
、stdout
和stderr
在很大程度上是一个Unix概念,但其他操作系统(如Windows)也复制了这个概念。这些由系统维护,通常不关闭它们
但是,您可以关闭它们,甚至在fork()
程序时必须关闭它们,这是Unix将程序从命令行分离并在后台运行的方法,例如守护进程
系统。输入
/输出
/错误
遵循此策略。所以你可以关闭它们,但你不必关闭,因为它们是特殊的系统资源 你知道,我不确定。我当然希望所有流在退出时都被关闭(想想作为管道一部分的JVM,它必须发出输入/输出结束的信号),但是如果JVM退出时出现错误会发生什么呢?如果错误足够严重,我确信流不会被刷新和关闭,总是有可能丢失数据。也就是说,可以关闭它们。是的,可以手动关闭它们,但不必这样做。