0

我正在使用一个必须提供 InputStream 和 PrintStream 的库。它使用 InputStream 收集数据进行处理,并使用 PrintStream 提供结果。我被困在使用这个库并且它的 API 不能被改变。

我认为有两个问题有相关的解决方案。

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

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

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

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

有任何想法吗?

编辑:要清楚,我不是在写图书馆。我正在编写代码,该代码应该为库提供一个 InputStream 来读取数据和一个 PrintStream 来写入数据。

4

1 回答 1

0

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

于 2012-11-30T01:55:53.977 回答