为什么原因是System.out.print自动冲洗?(Why does System.out.pr

2019-09-24 05:27发布

System.out的是一个PrintStream对象。 我读的PrintStream的文档。 我不明白的是为什么原因是System.out.print被刷新缓冲区? 难道不应该只发生了的println?

Answer 1:

难道不应该只发生了的println?

的Javadoc不说的时候也不会被刷新。 它说,这是一个刷新println() 或一个换行符



Answer 2:

在重复已经被注意到的事实的危险,让我尝试不同的一点解释文档...

看来,这只是在PrintBuffer 创建时间 (即构造函数调用期间)是一个PrintStream的自动冲洗行为可以进行设置。

此外,由于你已经指出的那样,文档指出,当调用任何的各种公共PrintBuffer构造的,不指定自动冲洗状态将导致非autoflushing PrintStream的创建。

然而,在System.out的情况下, 是不是呼吁PrintBuffer的construtor。 该java.lang.System中的类实例化的虚拟机启动时的“走出去”的PrintStream。 这意味着,当你请求的PrintStream对象,在其“走出去”领域的系统对象存储,你不知道它的构造函数被调用,因此没有当你问这个被交给你流的自动冲洗状态的想法为了它。

我同意,如果指定java.lang.System的该文档包含在其“走出去”领域的流具有自动冲洗行为设置为true,它会一直很不错。 但是,这不是一个“的要求,”比我需要记录将JButton是否从我的(假设的)返回的任何更多myCrazyPanel.getTheChangeColorsButton()启用或禁用。 是啊,按钮是默认启用 ,但你不能抱怨,如果将JButton被禁用。 这里同样的事情。



Answer 3:

你想,当你是System.out.print调用(),因为你希望它被打印到被刷新的缓冲区。 当我打电话打印,我想它打印东西。 如果它没有冲水,它只是停留在缓冲区,我就什么都看不到。

退房冲洗这里 。

基本上这是一个保证,它会立即得到打印。



文章来源: Why does System.out.print cause autoflush?