【发布时间】:2010-12-24 09:18:28
【问题描述】:
我有两个线程。其中一个写入 PipedOutputStream,另一个从相应的 PipedInputStream 读取。背景是一个线程正在从远程服务器下载一些数据,并通过管道流将其多路复用到其他几个线程。
问题是有时(尤其是在下载大型 (>50Mb) 文件时)我在尝试从 PipedInputStream 读取数据时收到 java.io.IOException: Pipe broken。
Javadoc 说 A pipe is said to be broken if a thread that was providing data bytes to the connected piped output stream is no longer alive.
确实,在将他的所有数据写入 PipedOutputStream 后,我的写作线程真的死了。
有什么解决办法吗?如何防止 PipedInputStream 抛出此异常?即使写入线程完成了他的工作,我也希望能够读取写入 PipedOutputStream 的所有数据。 (如果有人知道如何在所有数据都被读取之前保持写入线程处于活动状态,那么这个解决方案也是可以接受的)。
【问题讨论】:
标签: java multithreading io