Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的两个流管道_Java_Inputstream_Outputstream - Fatal编程技术网

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);

我不久前也遇到过同样的问题,我认为有一种循环缓冲区可以使用。