2010-11-19 8 views
12

Я немного запутался в потоках ... что это?Java-процесс getInputStream vs. getOutputStream

Просто, какой поток следует использовать, чтобы поймать вывод моего Процесса и какой поток я должен использовать, чтобы дать моему процессу некоторый ввод?

+4

Ненависть это, действительно запутанным – khachik

ответ

17

Вы можете читать только с InputStream, поэтому используйте это, чтобы поймать результат вашего процесса.

Вы пишете OutputStream, поэтому используйте это, чтобы дать процессу ваш ввод.

Вы используете имена, которые имеют смысл в контексте порожденного процесса. Но имена API имеют смысл в контексте родительского процесса.

Вот еще один совет: если ваш процесс записывается в стандартную ошибку, обязательно прочтите это. Если стандартные выходные или ошибочные трубы субпроцесса полны (поскольку ваш родительский процесс Java не потребляет их), дочерний процесс будет блокировать свои вызовы write().

+7

я нахожу это очень confising к, не сказать испорчен. Разве это не основной объектно-ориентированный шаблон проектирования, чтобы называть методы в контексте объекта, который предлагает этот метод? – rds

3

GetOutputStream вводится в процесс. Выход getInputStream выводится следующим образом: от процесс.

Обратитесь к JavaDocs, если это полезно.

7

Я всегда игнорирую имена и смотрю, что было возвращено. Если у вашего кода есть OutputStream, вы можете написать, что означает, что это вход для другого процесса. Если у вашего кода есть InputStream, вы можете читать от него - это означает, что это выход или ошибка для другого процесса.

К счастью, компилятор скажет вам, если вы поступаете неправильно, у вас есть данные, которые вы хотите доказать, поэтому вам нужно записать его в поток, а это значит, что он получил. OutputStream.

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