将数据从一个输入流传输到多个输出流的最佳方法

时间:2010-06-28 19:22:52

标签: java multithreading stream

当数据只需要通过管道输出到一个输出时,PipedInputStream / PipedOutputStream连接很有效,但如果多个输出流连接到一个输入流,则数据会在不同的输出上分段。我当前的解决方案涉及一个线程“读取器”,它从InputStream读取数据,然后将数据写入与读取器关联的OutputStream对象。这似乎工作正常,但与本机PipedIO类相比,它看起来很混乱,效率低下。

有没有更好的方法来解决这个问题,或者我正在处理的实施方式与我将会得到的一样好?

2 个答案:

答案 0 :(得分:1)

如果一个输入流必须由多个消费者读取,并且输入流是短暂的(即,不是可以'重绕'或支持多个输入指针的资源),您通常必须提供一个缓冲方案,表现就好像它保留每个数据项,直到所有消费者都读过它。

您有多种实施选择。最简单的是你的建议,开销主要是输出缓冲区中多个数据副本的存储空间。如果存储是一个问题,您可以提供单个缓冲区来维护单独的读指针,每个消费者一个,并且仅在内存中保留最低和最高读指针之间的数据。如果消费者以非常不同的速度读取数据,您仍然可能最终得到内存中的大部分或全部输入数据,此时需要某种输入限制或中间磁盘缓冲方案。

我认为单个输入流不是持久的(即磁盘上的文件)......在这种情况下,解决方案很简单。

答案 1 :(得分:0)