Wee*_*odd 9 java multithreading stream
当数据只需要通过管道连接到一个输出时,PipedInputStream/PipedOutputStream连接很有用,但如果多个输出流连接到一个输入流,则数据会在不同的输出上分段.我当前的解决方案涉及一个线程"读取器",它从InputStream读取数据,然后将数据写入与读取器关联的OutputStream对象.这似乎工作正常,但与本机PipedIO类相比,它看起来很混乱,效率低下.
有没有更好的方法来处理这个或者我正在使用的实现与我将要获得的一样好?
如果一个输入流必须由多个使用者读取,并且输入流是短暂的(即不是可以“倒带”的资源,或支持多个输入指针),那么您通常必须提供一种缓冲方案,其行为就像它保留每个数据项,直到所有消费者都读取它。
您在实施方面有多种选择。最简单的是您所建议的,开销主要是输出缓冲区中数据的多个副本的存储空间。如果存储是一个问题,您可以提供一个缓冲区来维护单独的读指针,每个使用者一个,并且仅在内存中保留最低和最高读指针之间的数据。如果消费者以截然不同的速度读取数据,您仍然可能最终将大部分或全部输入数据存储在内存中,此时某种输入限制或中间磁盘缓冲方案将变得必要。
我假设单个输入流不是持久的(即磁盘上的文件)......在这种情况下,解决方案很简单。