我正在研究ProcessBuilder类,并在其中说每个流程构建器管理的流程属性之一如下:
标准输入源。默认情况下,子进程读取输入 从管道。 Java代码可以通过输出流访问此管道 由Process.getOutputStream()返回。但是,标准输入可能是 使用redirectInput重定向到另一个源。在这种情况下, Process.getOutputStream()将返回一个空输出流,其中包含:
- write方法总是抛出IOException
- close方法什么都不做
然后我查找了名为getOutputStream的API函数,但它仍未点击m。
我不明白这句话的含义:
将流输出传输到流程的标准输入 由此Process对象表示。
只是寻找有关其工作原理的说明或示例代码。感谢
答案 0 :(得分:1)
这是一个简单的示例代码。
public class ParentProcess {
public static void main(String[] arags) throws IOException, InterruptedException {
Process p = new ProcessBuilder(
"java", "-cp", "bin", "stackoverflow.ChildProcess").start();
// receive from child
new Thread(() -> {
try {
int c;
while ((c = p.getInputStream().read()) != -1)
System.out.write((byte)c);
} catch (Exception e) {
e.printStackTrace();
}
}).start();
// send to child
try (Writer w = new OutputStreamWriter(p.getOutputStream(), "UTF-8")) {
w.write("send to child\n");
}
System.out.println("rc=" + p.waitFor());
}
}
class ChildProcess {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
// receive from parent and send to parent
System.out.println("child recevied: " + s.nextLine());
}
}
结果是:
child recevied: send to child
rc=0