gpt4 book ai didi

java - 使用InputStream/OutputStream处理通过模块的数据流

转载 作者:行者123 更新时间:2023-12-02 07:04:00 25 4
gpt4 key购买 nike

所以现在我有一堆模块。这就像一条装配线。有数据流过,每个模块都会对数据执行一些操作,或者您可以说下一个模块消耗前一个模块产生的输出。每个模块都应该是独立且可重用的。我认为这是一个非常典型的场景。

所以最初我将每个模块的接口(interface)设计为模块(InputStream是,OutputStream os)。因此它可以将文件(无论来源如何)作为输入和输出。当您考虑数据流时,前一个模块的输出流将进入下一个模块的输入流。但后来我意识到 Java 甚至没有一种直观/简单的方法来将数据从 OutputStream 获取到 InputStream。(注意:这个问题不是关于如何实现这一点。对于那些有兴趣的人, How to convert OutputStream to InputStream? )

在我看来,OutputStream/InputStream 可能并不适合这样的目的。那么在这种情况下,设计处理数据流的接口(interface)的最佳方法是什么?

最佳答案

对于离散对象,您可以使用生产者/消费者模式 ConcurrentLinkedQueuesBlockingQueues - 每个模块都有自己的队列,并且它将不断轮询其队列(如果是BlockingQueue,则使用take),处理对象,并提供 code> 将其添加到下一个模块的队列中。

如果您将字节流分成通过队列传递的较小字节数组,则此模式也可以用于字节流,但这并不总是合适的(例如,如果 module1 读取、 module2 压缩和 module3 加密,那么您'将数据保留在流中可能会更好,除非您有某种合理的方法来对数据进行分块)。

关于java - 使用InputStream/OutputStream处理通过模块的数据流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16311847/

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