Java System.in/out/err 是否始终打开?

Are Java System.in/out/err always open?

Javadoc 说 inouterr 是 'already open',我只是想知道它们会在程序完成后关闭吗?如果不是,是否与使用后关闭任何 I/O 流引用的做法相矛盾?

System.in/out/err这些类是JVM实例化的,不是我们实例化的。 因此 JVM 将负责关闭它们。

stdinstdoutstderr 在很大程度上是一个 Unix 概念,但其他操作系统(例如 Windows)也复制了这个概念。这些都是系统维护的,平时不用关闭。

但是,您可以关闭它们,并且当您fork()一个程序时,您甚至必须关闭它们,这是让程序从命令行分离并 运行 在后台运行的 Unix 方式,例如守护进程。

System.in/out/err遵循这个策略。所以你可以关闭它们,但你不必这样做,因为它们是特殊的系统资源。