我正在使用 PipedInputStream 在事物之间发送数据。当连接到 PipedInputStream 的 PipedOutputStream 关闭时,似乎无法检测到 PipedInputStream 不再能够读取数据。目前,我正在使用try { ... } catch(IOException e) { ... }
.
是否有更惯用的方法来检测关闭的输入流,还是所有 Java 都提供?我查看了 API 文档,期待一个boolean isOpen()
或这样的文档,但找不到。
我正在使用 PipedInputStream 在事物之间发送数据。当连接到 PipedInputStream 的 PipedOutputStream 关闭时,似乎无法检测到 PipedInputStream 不再能够读取数据。目前,我正在使用try { ... } catch(IOException e) { ... }
.
是否有更惯用的方法来检测关闭的输入流,还是所有 Java 都提供?我查看了 API 文档,期待一个boolean isOpen()
或这样的文档,但找不到。
我会说打开另一个方向的沟通渠道。然后在关闭时PipedOutputStream
,您可以使用 向一侧发送一个字节PipedInputStream
,并通过关闭两侧的输出和输入流来做出反应。否则,您会被 try catch 构造所困,没有其他 100% 的方式可以说,另一端的流已关闭,而不是尝试发送数据。
您可以尝试构建一个观察者模型样式系统,这样当PipedOutputStream
关闭时,它会发送一个信号,该信号PipedInputStream
通过侦听器接收。所以一方面你会拥有PipedOutputStream.signalClosing()
,另一方面你有onOutputStreamClosing(Event e)
处理事件的函数(可能通过设置一个布尔值,或者只是关闭输入流)。