gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:25:59 24 4
gpt4 key购买 nike

当数据只需要通过管道传输到一个输出时,PipedInputStream/PipedOutputStream 连接非常有用,但如果多个输出流连接到一个输入流,数据就会分散在不同的输出中。我目前的解决方案涉及到有一个线程化的“阅读器”,它从 InputStream 读取数据,然后将数据写入与阅读器关联的 OutputStream 对象。这似乎工作正常,但与 native PipedIO 类相比,它似乎困惑且效率低下。

有没有更好的方法来处理这个问题,或者我正在使用的实现是否与我将要获得的一样好?

最佳答案

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

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

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

关于java - 将数据从一个输入流传输到多个输出流的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3135472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com