【问题标题】:Idioms for checking that an InputStream has been closed?检查 InputStream 是否已关闭的习语?
【发布时间】:2013-10-15 13:56:00
【问题描述】:

我正在使用 PipedInputStream 在事物之间发送数据。当连接到 PipedInputStream 的 PipedOutputStream 关​​闭时,似乎无法检测到 PipedInputStream 不再能够读取数据。目前,我使用的是try { ... } catch(IOException e) { ... }

是否有更惯用的方法来检测关闭的输入流,还是 Java 提供的所有方法?我查看了 API 文档,期待 boolean isOpen() 之类的,但找不到。

【问题讨论】:

    标签: java file-io inputstream ioexception


    【解决方案1】:

    我会说打开另一个方向的沟通渠道。然后在关闭PipedOutputStream 时,您可以使用PipedInputStream 向一侧发送一个字节,并通过关闭两侧的输出和输入流来做出反应。否则你会被 try catch 构造所困,没有其他 100% 的方式可以说,另一端的流已关闭,而不是尝试发送数据。

    【讨论】:

    • 是的,可以。虽然我认为 Java 流应该开箱即用地包含一些东西,但开销很大。
    • 我同意你的观点,不幸的是它没有:(
    【解决方案2】:

    您可以尝试构建一个观察者模型样式系统,这样当PipedOutputStream 关闭时,它会发送一个信号,PipedInputStream 通过侦听器接收到该信号。所以一方面你会有PipedOutputStream.signalClosing(),另一方面你有onOutputStreamClosing(Event e)函数来处理事件(可能通过设置一个布尔值,或者只是关闭输入流)。

    【讨论】:

      猜你喜欢
      • 2019-01-20
      • 1970-01-01
      • 2011-06-16
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 2012-01-29
      • 2010-12-22
      相关资源
      最近更新 更多