Java使用流作为;“缓冲区”;

Java使用流作为;“缓冲区”;,java,stream,Java,Stream,我正在使用一个库,我必须提供一个InputStream和一个PrintStream。它使用InputStream收集数据进行处理,使用PrintStream提供结果。我一直在使用这个库,它的API无法更改 我认为有两个问题可以解决 首先,需要通过InputStream读取的数据在前端不可用。相反,数据由应用程序的不同部分动态创建,并通过方法调用以字符串形式提供给我的代码。我的代码的工作是以某种方式允许库在获取数据时通过提供的InputStream读取这些数据 其次,我需要以某种方式获得写入Pri

我正在使用一个库,我必须提供一个InputStream和一个PrintStream。它使用InputStream收集数据进行处理,使用PrintStream提供结果。我一直在使用这个库,它的API无法更改

我认为有两个问题可以解决

首先,需要通过InputStream读取的数据在前端不可用。相反,数据由应用程序的不同部分动态创建,并通过方法调用以字符串形式提供给我的代码。我的代码的工作是以某种方式允许库在获取数据时通过提供的InputStream读取这些数据

其次,我需要以某种方式获得写入PrintStream的结果,并将其作为字符串发送到应用程序的另一部分。这需要在将数据放入PrintStream后立即发生

看起来我需要的是两个行为或多或少类似于缓冲区的流对象。我需要一个InputStream,每当我有数据时,我就可以将数据推入其中;我需要一个PrintStream,每当它有内容时,我就可以抓取它的内容。这对我来说似乎有点尴尬,但我不知道还能怎么做

我想知道是否已经存在允许这种行为的东西,或者是否有一种不同的(更好的)解决方案可以在我描述的情况下工作。我唯一能想到的就是尝试用这种行为实现流,但这可能会很快变得复杂(特别是因为InputStream需要阻塞,直到数据可用为止)

有什么想法吗


编辑:说清楚一点,我不是在写库。我正在编写的代码应该为库提供一个用于读取数据的InputStream和一个用于写入数据的PrintStream。

看起来两个流都需要不断地读/写,因此需要两个相互独立的线程。该模式有点类似于JMS,在这种情况下,您将信息提供给“队列”或“主题”,并等待处理,然后将其放在“输出”队列/主题上。这可能会引入额外的移动部分,但您可以编写一个简单的客户机,将信息放入JMS队列,然后使用一个侦听器来捕获消息,并不断地将其提供给输入流。然后从输出流读取另一段代码,并使用它执行您需要的操作。
希望这有帮助

你试过什么?您只需要编写一点代码就可以启动并运行它。这与标准的套接字编程没有什么不同。我开始实现InputStream和OutputStream以具有缓冲区,但我一直在研究如何在InputStream缓冲区中没有数据时正确地进行阻止。此外,应用程序是线程化的,因此同步成为一个问题,我不知道如何确保在正确的情况下阻止正确的线程,以及如何在数据可用时再次唤醒它们。