我对流有点困惑......哪个是哪个?
简单地说,我应该使用哪个流来捕获我的Process的输出,以及我应该使用哪个流来为我的Process提供一些输入?
答案 0 :(得分:18)
您只能从InputStream
读取,因此请使用它来捕获流程的输出。
您写信给OutputStream
,因此请使用该功能为您提供输入。
您正在使用在生成过程的上下文中有意义的名称。但API名称在父进程的上下文中是有意义的。
这是另一个提示:如果您的进程写入标准错误,请务必阅读。如果子流程的标准输出或错误管道已满(因为您的父Java流程没有使用它们),子进程将阻止其write()
调用。
答案 1 :(得分:7)
我总是忽略这些名字并查看返回的内容。如果您的代码有OutputStream
,则可以写 - 这意味着它是其他进程的输入。如果您的代码有InputStream
,则可以从中读取 - 这意味着它是输出或其他进程的错误。
幸运的是,编译器会告诉你,如果你做错了 - 你已经得到了想要提供的数据,所以你必须将它写入流,这意味着它得到了< / em>是OutputStream
。
答案 2 :(得分:3)
getOutputStream是输入到进程。 getInputStream从进程读取。
如果有帮助,请参阅JavaDocs。
答案 3 :(得分:0)
看看文档。与其他以“显而易见”的方式构建的框架相比,这确实完全搞乱了,所以文档就是你的朋友。
public abstract OutputStream getOutputStream()
> Gets the output stream of the subprocess. Output to the stream is piped into the standard input stream of the process
本来应该太简单了:
public abstract InputStream getInputStream()
> Gets the standarinput stream of the subprocess. Output to the stream is piped into the standard input stream of the process