我需要关闭 PipedInputStream 和 PipedOutputStream

Dim*_*mpl 5 java inputstream outputstream

我正在编写一个简单的 Swing GUI,其中包含一个打印调试消息和异常的文本字段。我目前已将其设置在写入 PipedOutputStream 的位置,并且我有一个守护线程,它从连接的 PipedInputStream 读取数据并写入文本区域。

当我试图弄清楚如何关闭守护线程中的流时,我遇到了另一个答案,它说守护线程不应持有任何资源。管道流算吗?他们需要关闭吗?

Ste*_*n C 4

A PipedInputStream/PipedOutputStream不占有任何操作系统资源。因此,任何有关守护线程不应占用资源的建议均不适用于此处。(但见下文!)

然而,这并不意味着您不需要(至少close()PipedOutputStream. 根据您的应用程序,相应的PipedInputStream 可能需要关闭管道才能完成其工作。


关于另一个答案

看了答案和评论后,我认为他的论点过于笼统:

  • 他是正确的,任何同时打开大量(他说“数百”)资源的东西(守护线程或其他)都是一个坏主意。

  • 他说在守护线程中进行关键文件更新是有风险的,这也是正确的。但在 Java 的任何线程中进行关键文件更新都具有相同的风险1。或者在 C 语言中。您只需将更新序列设计为故障安全......或者依靠诸如数据库事务之类的东西来实现故障安全。

然而,将其概括为守护线程不应持有资源在逻辑上是不合理的(或在实用上是明智的)。显然,有些用例并不适用上述问题。


1 - 应用程序可能会收到“kill -9”,这将导致它立即退出而不运行关闭挂钩。应用程序可能会在关键更新过程中出现“文件系统已满”的情况。电源可能会关闭。等等 ...