我正在使用一个库,该库必须提供InputStream和PrintStream。它使用InputStream收集数据进行处理,并使用PrintStream提供结果。我一直在使用这个库,它的API无法更改。
有两个问题,我认为有相关的解决方案。
首先,需要通过InputStream读取的数据无法提前获得。相反,数据是由应用程序的不同部分动态创建的,并通过方法调用以字符串的形式提供给我的代码。我的代码的工作是以某种方式允许库在获得数据时通过提供的InputStream读取这些数据
其次,我需要以某种方式获得写入PrintStream的结果,并将其作为字符串发送到应用程序的另一部分。这需要在数据被放入PrintStream后立即发生。
看起来我需要的是两个流对象,它们的行为或多或少像缓冲区。我需要一个InputStream,只要我有数据,我就可以把它推到里面,还需要一个PrintStream,只要它有内容,我就能抓取它的内容。这对我来说似乎有点尴尬,但我不知道还能怎么做
我想知道是否已经存在允许这种行为的东西,或者是否有一种不同的(更好的)解决方案可以在我描述的情况下工作。我唯一能想到的就是尝试用这种行为实现流,但这可能会很快变得复杂(尤其是因为InputStream需要阻塞,直到数据可用)。
有什么想法吗?
编辑:明确地说,我不是在写库。我正在编写的代码应该为库提供一个从中读取数据的InputStream和一个向中写入数据的PrintStream
看起来两个流都需要不断地读/写,因此需要两个相互独立的线程。该模式有点类似于JMS,在这种情况下,您将信息馈送到"队列"或"主题",等待处理,然后将其放入"输出"队列/主题。这可能会引入额外的移动部分,但您可以编写一个简单的客户端,将信息放置到JMS队列中,然后让一个侦听器只捕获消息,并不断地将其提供给输入流。然后从输出流中读取另一段代码,并使用它执行您需要的操作。希望这能有所帮助。