Process类的getOutputStream方法如何工作?

时间:2016-01-10 01:06:15

标签: java processbuilder

我正在研究ProcessBuilder类,并在其中说每个流程构建器管理的流程属性之一如下:

  

标准输入源。默认情况下,子进程读取输入   从管道。 Java代码可以通过输出流访问此管道   由Process.getOutputStream()返回。但是,标准输入可能是   使用redirectInput重定向到另一个源。在这种情况下,   Process.getOutputStream()将返回一个空输出流,其中包含:

     
      
  • write方法总是抛出IOException
  •   
  • close方法什么都不做
  •   

然后我查找了名为getOutputStream的API函数,但它仍未点击m。

我不明白这句话的含义:

  

将流输出传输到流程的标准输入   由此Process对象表示。

只是寻找有关其工作原理的说明或示例代码。感谢

1 个答案:

答案 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