【问题标题】:The flush method of OutputStream does nothing?OutputStream 的 flush 方法什么都不做?
【发布时间】:2012-12-03 15:22:28
【问题描述】:

来自OutputStream.flush() docs。

为什么它在文档中说明OutputStreamflush 方法什么都不做 在解释它实际上做了一些事情之后?非常混乱。

【问题讨论】:

    标签: java io outputstream


    【解决方案1】:

    OutputStream 是一个派生自的抽象类。子类将提供自己的实现如果需要。否则默认行为是什么都不做。

    例如查看ObjectOutputStream.flush()的代码

    【讨论】:

    • 合理。但在文档中仍然是一个奇怪的表述。
    • 之所以出现在文档中是因为方法本身不是抽象的,所以实现这个类的具体实例的开发人员需要知道基类做了什么。我同意对于界面的消费者来说,这是令人困惑的。
    【解决方案2】:

    OutputStream 是一个抽象类。 如果需要刷新,派生实例必须覆盖它。 例如BufferedOutputStream
    没有缓冲区的流可能不需要覆盖flush()

    【讨论】:

    • 不必。它可以选择不
    • 所有抽象类都可以选择,也可以不实现。
    • 但是你上面已经说过,派生实例必须。这是我不同意的一点!
    • public abstract void write(int b) 似乎是OutputStream 唯一实现的方法。所有其他人都有默认实现(即使他们什么都不做)。
    【解决方案3】:

    正文的第一部分是描述flush的总合同。扩展 OutputStream 的类应遵守此协定。

    OutputStream 是一个抽象类,但提供了flush 的默认实现。如前所述,该实现什么也不做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      • 2015-01-13
      • 2011-02-18
      相关资源
      最近更新 更多