Как реализован Java Process.getOutputStream ()? - PullRequest
1 голос
/ 26 февраля 2010

Я знаю, что ответ зависит от конкретной JVM, но я хотел бы понять, как это обычно реализуется? Это с точки зрения попен (posix)? Что касается эффективности, нужно ли что-то иметь в виду (кроме использования буферизованного потока, как предложено javadoc ). Мне было бы интересно узнать, есть ли общая справка о реализации JVM, которая отвечает на такие вопросы.

1 Ответ

3 голосов
/ 26 февраля 2010

Посмотрите на источник JDK .

В этом случае, для Unix, посмотрите на UnixProcess class.it делает fork и exec и оборачивает потоки файлов и буферов вокруг собственных дескрипторов файлов.

pid = forkAndExec(prog,
              argBlock, argc,
      envBlock, envc,
      dir,
      redirectErrorStream,
      stdin_fd, stdout_fd, stderr_fd);
stdin_stream = new BufferedOutputStream(new FileOutputStream(stdin_fd));

Для нативного кода посмотрите на: родной / Java / языки / UNIXProcess_md.c

Это делает что-то интересное! он открывает каналы и передает их как STDIN, STDOUT, STDERR дочернему элементу, а другой канал используется родительским элементом!

Вкратце механизм МПК - это трубы.

...