Я немного запутался в потоках... что это?
Просто, какой поток я должен использовать, чтобы поймать вывод моего Процесса и какой поток я должен использовать, чтобы дать моему процессу некоторый ввод?
Я немного запутался в потоках... что это?
Просто, какой поток я должен использовать, чтобы поймать вывод моего Процесса и какой поток я должен использовать, чтобы дать моему процессу некоторый ввод?
Вы можете читать только с InputStream
, поэтому используйте это, чтобы поймать вывод вашего процесса.
Вы пишете файл OutputStream
, поэтому используйте это, чтобы дать процессу ваш ввод.
Вы используете имена, которые имеют смысл в контексте порожденного процесса. Но имена API имеют смысл в контексте родительского процесса.
Вот еще один совет: если ваш процесс записывается в стандартную ошибку, обязательно прочтите это. Если стандартные каналы вывода или ошибки в подпроцессе полны (поскольку ваш родительский процесс Java не потребляет их), дочерний процесс будет блокировать вызовы write()
.
Я всегда игнорирую имена и смотрю, что вернулось. Если ваш код имеет OutputStream
, вы можете написать ему, что означает его ввод для другого процесса. Если ваш код имеет InputStream
, вы можете прочитать его, что означает его вывод или ошибку для другого процесса.
К счастью, компилятор скажет вам, поступаете ли вы неправильно: у вас есть данные, которые вы хотите доказать, поэтому вам нужно написать это в поток, а это значит, что это будет OutputStream
.
GetOutputStream вводится в процесс. GetInputStream выводится из процесса.
Если это полезно, обратитесь к JavaDocs.
Посмотрите на документ. Это действительно полностью беспорядочно, по сравнению с другими структурами, которые делают это "очевидным" способом, поэтому документ - ваш друг.
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