在Java中管理两个流

时间:2018-04-20 17:11:19

标签: java inputstream outputstream

我想将OutputStream发送到InputStream,这样每次我写OutputStream时,InputStream都可以使用这些字节。

阅读JDK文档,我发现PipeInputStreamPipeOutputStream似乎是一个不错的选择,例如。

PipedOutputStream out = new PipedOutputStream();
PipedInputStream in = new PipedInputStream(out);

但是,documentation明确声明必须在单独的线程中使用两个流。

  

通常,一个线程从PipedInputStream对象读取数据,而其他线程将数据写入相应的PipedOutputStream。建议不要尝试使用单个线程中的两个对象,因为它可能使线程死锁。

是否有另一种简单的方法可以使用Java中提供的其他一些功能来管理这两个流以在同一个线程中运行?

我认为这里的主要问题是将正在写入的数据缓冲到输出,因为在我们写入时,这些字节会在某处缓冲,以便稍后由输入读取部分使用。

但是我正在使用离散量的数据,这种数据很容易适合内存。所以对我来说,缓冲几个字节并不是一个大问题。我更感兴趣的是找到一个简单的模式来做到这一点。

就是这样,我想我可以通过将所有内容写入ByteArrayOutputStream来手动完成此操作,然后从中获取字节并在ByteArrayInputStream中再次读取它们。

然而,这种管道方案似乎是一个自然的用例,我想知道是否有另一种更简单的方法来管理单线程应用程序中的两个流,例如

output.pipe(input);
message.writeTo(output);
process(input);

0 个答案:

没有答案