【问题标题】:java input output streamjava输入输出流
【发布时间】:2011-11-17 13:59:34
【问题描述】:

对于在 Java 中创建一个既是 InputStream 又是 OutputStream 的 Pipe 对象有什么好的建议吗,因为 Java 没有多重继承,并且两个流都是抽象类而不是接口?

【问题讨论】:

  • 也许……“优先考虑‘对象组合’而不是‘类继承’。” (四人帮 1995:20)

标签: java


【解决方案1】:

【讨论】:

  • Javadoc 明确指出 “不建议尝试从单个线程使用两个对象,因为它可能会使线程死锁”。发生的情况是PipedInputStream.read() 将阻塞调用线程,直到关联的PipedOutputStream.write() 在另一个线程中被调用。
【解决方案2】:

检查Pipe 类以获得现成的实现

PipedInputStreamPipedOutputStream

【讨论】:

    【解决方案3】:

    您不会有一个实例同时用作输入流和输出流。相反,您可以拥有一个 Pipe 对象,该对象封装(即组合)一个用于读取的 InputStream 和一个用于写入的 OutputStream。

    与标准 API 中的 System.inSystem.out 非常相似。

    【讨论】:

      【解决方案4】:

      这是一个很好的例子,您不需要多重继承,而且您以这种方式提出问题的事实让我有点担心。

      在这种情况下,您将拥有一个具有输入流和输出流的类。无需扩展任何东西或使用接口。

      在更改您的代码以执行此操作后,请阅读这篇关于组合与继承的文章: http://www.artima.com/lejava/articles/designprinciples4.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-19
        • 2012-11-17
        • 2017-06-09
        • 2015-06-18
        • 1970-01-01
        • 2011-06-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多