Java中的两个流管道
我想通过管道将Java中的两个流管道,java,inputstream,outputstream,Java,Inputstream,Outputstream,我想通过管道将OutputStream传输到InputStream,这样每当我写入OutputStream时,这些字节就可以在InputStream中使用 阅读JDK文档,我发现和似乎是一个不错的选择,例如 PipedOutputStream out = new PipedOutputStream(); PipedInputStream in = new PipedInputStream(out); 但是,声明明确指出这两个流必须在单独的线程中使用 通常,一个线程从PipedInputStre
OutputStream
传输到InputStream
,这样每当我写入OutputStream
时,这些字节就可以在InputStream
中使用
阅读JDK文档,我发现和似乎是一个不错的选择,例如
PipedOutputStream out = new PipedOutputStream();
PipedInputStream in = new PipedInputStream(out);
但是,声明明确指出这两个流必须在单独的线程中使用
通常,一个线程从PipedInputStream对象读取数据,另一个线程将数据写入相应的PipedOutStream。不建议尝试从单个线程使用这两个对象,因为这可能会使线程死锁
是否有另一种简单的方法可以使用Java中的一些其他功能将这两个流输送到同一个线程中运行
我想这里的主要问题是缓冲写入输出的数据,因为当我们写入时,这些字节被缓冲到某个地方,稍后由输入读取部分使用
然而,我正在处理离散量的数据,这种数据很容易存储在内存中。所以对我来说,缓冲几个字节并不是什么大问题。我更感兴趣的是找到一个简单的模式来实现这一点
在这种情况下,我想我可以很容易地手动完成这项工作,将所有内容写入ByteArrayPutStream
,然后从中获取字节,并在ByteArrayPutStream
中再次读取它们
然而,这个管道场景似乎是一个很自然的用例,我想知道是否有另一种更简单的方法在单线程应用程序中管道两个流,例如
output.pipe(input);
message.writeTo(output);
process(input);
我不久前也遇到过同样的问题,我认为有一种循环缓冲区可以使用。