Подтвердить что ты не робот

Процесс Java getInputStream vs. getOutputStream

Я немного запутался в потоках... что это?

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

GetOutputStream вводится в процесс. GetInputStream выводится из процесса.

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

Ответ 4

Посмотрите на документ. Это действительно полностью беспорядочно, по сравнению с другими структурами, которые делают это "очевидным" способом, поэтому документ - ваш друг.

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