Я немного запутался в потоках ... что это?Java-процесс getInputStream vs. getOutputStream
Просто, какой поток следует использовать, чтобы поймать вывод моего Процесса и какой поток я должен использовать, чтобы дать моему процессу некоторый ввод?
Я немного запутался в потоках ... что это?Java-процесс getInputStream vs. getOutputStream
Просто, какой поток следует использовать, чтобы поймать вывод моего Процесса и какой поток я должен использовать, чтобы дать моему процессу некоторый ввод?
Вы можете читать только с InputStream
, поэтому используйте это, чтобы поймать результат вашего процесса.
Вы пишете OutputStream
, поэтому используйте это, чтобы дать процессу ваш ввод.
Вы используете имена, которые имеют смысл в контексте порожденного процесса. Но имена API имеют смысл в контексте родительского процесса.
Вот еще один совет: если ваш процесс записывается в стандартную ошибку, обязательно прочтите это. Если стандартные выходные или ошибочные трубы субпроцесса полны (поскольку ваш родительский процесс Java не потребляет их), дочерний процесс будет блокировать свои вызовы write()
.
я нахожу это очень confising к, не сказать испорчен. Разве это не основной объектно-ориентированный шаблон проектирования, чтобы называть методы в контексте объекта, который предлагает этот метод? – rds
GetOutputStream вводится в процесс. Выход getInputStream выводится следующим образом: от процесс.
Обратитесь к JavaDocs, если это полезно.
Я всегда игнорирую имена и смотрю, что было возвращено. Если у вашего кода есть OutputStream
, вы можете написать, что означает, что это вход для другого процесса. Если у вашего кода есть InputStream
, вы можете читать от него - это означает, что это выход или ошибка для другого процесса.
К счастью, компилятор скажет вам, если вы поступаете неправильно, у вас есть данные, которые вы хотите доказать, поэтому вам нужно записать его в поток, а это значит, что он получил. OutputStream
.
Посмотрите на документ. Это действительно полностью беспорядочно, по сравнению с другими структурами, которые делают его «очевидным» способом, поэтому документ - ваш друг.
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
Ненависть это, действительно запутанным – khachik