PipedInputStreamPipedOutputStream用于线程间数据传输。 “通过一个线程从PipedInputStream对象读取数据,并通过另一个线程将数据写入相应的PipedOutputStream”。

到目前为止,一切都很好。我从该范例中看到的一个潜在好处是,零散的生产者(OutputStream)不需要被速度较慢的使用者(InputStream)放慢速度。换句话说,在OutputStream突然产生大量数据而使消费者无法立即使用的数据时,OutputStream无需等待所产生的数据被完全消耗就可以继续使用。

问题1:我的理解正确吗?这是PipedStreams构造的好处之一吗?

如果对问题1的回答为"is",则:

当缓冲区未满时,这很好用,但是当缓冲区已满时,在JDK6的实现中,PipedOutputStream会阻塞并等待更多空间释放。这超出了我上面提到的目的,不是吗?

通过更改完整缓冲区的行为,从等待新空间到分配更大的缓冲区,似乎很容易解决此问题。我可能可以在几分钟内实现一个,但是如果这样的东西已经可以使用了,我不希望重新发明轮子。我在谷歌上搜索了很多,但是却找不到任何东西,这对我来说非常令人惊讶。

有人可以指出我正确的方向吗?还是指出我的想法有误?

谢谢

最佳答案

PipedOutputStream并不是真正打算以这种方式缓冲结果(缓冲在其实现中更多是副作用)。正如Javadoc所说:



为了按照您描述的方式进行缓冲,我倾向于使用http://download.oracle.com/javase/6/docs/api/java/util/concurrent/LinkedBlockingQueue.html

10-08 01:37