为什么System.out.print导致autoflush?

时间:2012-10-17 01:05:14

标签: java buffer system.out

System.out是一个PrintStream对象。我阅读了关于PrintStream的文档。我没有得到的是为什么System.out.print导致刷新缓冲区?难道不应该只为println发生吗?

3 个答案:

答案 0 :(得分:1)

  

不应该只为println发生吗?

Javadoc没有说明什么时候不会被刷新。它表示 将在println() 或换行符上刷新。

答案 1 :(得分:1)

冒着重复已经注意到的事实的风险,让我尝试以不同的方式解释文档......

似乎只有在PrintBuffer 创建时(即在构造函数调用期间)才能设置PrintStream的autoFlush行为。

另外,正如您所指出的,文档指出,在调用任何各种公共PrintBuffer构造函数时,如果不指定autoflush状态,将导致创建非自动刷新PrintStream。

但是,在System.out的情况下,没有调用PrintBuffer的construtor。 java.lang.System类在VM启动时实例化“out”PrintStream。这意味着,当您请求Print对象存储在其“out”字段中的PrintStream对象时,您不知道调用了哪个构造函数,因此当您询问时,不知道流的自动刷新状态为了它。

我同意,如果java.lang.System的文档指定其“out”字段中包含的流的autoflush行为设置为true,那将是非常好的。但这不是一个“要求”,不仅仅是我需要记录从我的(假设的)myCrazyPanel.getTheChangeColorsButton()返回的JButton是否已启用或禁用。是的,按钮默认启用 ,但如果JButton被禁用,则不允许您投诉。这里也是一样。

答案 2 :(得分:0)

您希望在调用System.out.print()时刷新缓冲区,因为您希望打印它。当我打印时,我想要它打印一些东西。如果没有刷新,它只会保留在缓冲区中,我什么都看不到。

查看同花顺here

基本上它保证会立即打印出来。