从PipedInputStream和PipedOutputStream的文档来看,前者是通信管道的接收端,后者是发送端。这就形成了这样一个结构:
A -> PipedInputStream -> PipedOutputStream -> B
我的问题是如何具体说明什么是A和B。我希望A是标准输入流System.in,B是一个FileOutputStream。
如果我错了,请纠正我,但我认为管道流对象提供了一种将InputStream连接到OutputStream的方法。然而,我没有看到任何将PipedInputStream连接到除PipedOutputStream之外的任何东西的方法,反之亦然。
发布于 2021-01-14 09:17:38
您链接到了PipedOutputStream的javadoc,但似乎没有读过它。
管道输出流可以连接到管道输入流以创建通信管道。管道输出流是管道的发送端。通常,数据是由一个线程(
PipedOutputStream)写入对象的,而数据是由其他线程()从连接的中读取的。
因此,数据流向与问题所显示的相反的方向:
Thread A → PipedOutputStream → PipedInputStream → Thread B正如您所看到的,我还通过显示A 和 B 是 threads,,即代码,而不是其他流来澄清它。
如果我错了,
会纠正我的错误,但我认为管道流对象提供了一种将
InputStream连接到OutputStream的方法。
你可以从上面的描述中看到,你错了。管道流对象为线程提供了一种使用Stream /O调用向另一个线程发送数据的方法。
它们被称为“管道”,因为它的工作方式类似于一个程序可以写到stdout,另一个程序可以从stdin读取,然后您可以使用|管道连接这两个程序,例如,foo.exe | bar.exe会将来自foo程序的输出作为bar程序的输入。
这只是在进程之间,而管道流是在线程之间。
I希望
A是标准输入流System.in,B是FileOutputStream。
如果要从System.in复制到文件,可以执行以下任何操作:
// Using newer NIO.2 API (Java 7+)
Files.copy(System.in, Paths.get(filename), StandardCopyOption.REPLACE_EXISTING);// Using old File I/O API with transferTo (Java 9+)
try (FileOutputStream out = new FileOutputStream(new File(filename))) {
System.in.transferTo(out);
}// Using old File I/O API with try-with-resources (Java 7+)
try (FileOutputStream out = new FileOutputStream(new File(filename))) {
byte[] buf = new byte[8192];
for (int len; (len = System.in.read(buf)) > 0; )
out.write(buf, 0, len);
}// Using old File I/O API (any Java version)
FileOutputStream out = new FileOutputStream(new File(filename));
try {
byte[] buf = new byte[8192];
for (int len; (len = System.in.read(buf)) > 0; )
out.write(buf, 0, len);
} finally {
out.close();
}发布于 2021-01-14 08:37:23
首先,沟通的方向是
A -> PipedOutputStream -> PipedInputStream -> B.
不可能将A或B设置为某些特定的流。
一个简单的线程表示一个线程,该线程调用PipedOutputStream的PipedOutputStream方法来提交一些数据,然后将该数据传输到另一个线程B可以使用read()方法读取数据的PipedInputStream。
发布于 2021-01-14 08:36:58
PipedInputStream和PipedOutputStream用于在两个线程之间创建一个管道。
通常你会做这样的事情:
PipedOutputStream
PipedOutputStream和一个PipedInputStream,并将它们连接到
PipedInputStream读取的线程https://stackoverflow.com/questions/65715627
复制相似问题