2016-01-10 4 views
0

Я учусь в ProcessBuilder класс, и там говорится, что один из атрибутов процесса, что каждый процесс строитель управляет выглядит следующим образом:Как работает метод getOutputStream класса Process?

источник стандартного ввода. По умолчанию подпроцесс считывает входной сигнал из трубы. Java-код может получить доступ к этому каналу через выходной поток , возвращенный Process.getOutputStream(). Однако стандартный ввод может быть перенаправлен в другой источник с использованием redirectInput. В этом случае, Process.getOutputStream() будет возвращать нулевой выходной поток, для которого:

  • методы записи всегда бросить IOException
  • близкий метод не делает ничего

Я тогда просмотрел функцию API под названием getOutputStream, однако она все еще не нажимает на m.

Я не понимаю, что они подразумевают под фразой:

Выход на поток подается по трубам в стандартный ввод процесса , представленного этим объектом процесса.

Просто ищите пояснения или, возможно, образец кода о том, как это работает. спасибо

ответ

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 
Смежные вопросы