Вы читаете данные из InputStream не из OutputStream.
OutputStream является используемый для передачи данных в процесс.
Существует два основных входных потока для Process
. Один из них предназначен для стандартного ввода и может быть получен с помощью getInputStream()
другой на наличие ошибок и могут быть получены с getErrorStream()
От Javadoc из getInputStream()
:
Возвращает входной поток, подключенный к обычному выходу подпроцесса
и от getErrorStream()
Возвращает входной поток, подключенный к выходу ошибки подпроцесса .
Обратите внимание на потоки: с точки зрения Java программы A Process
является внешняя программа. Когда вам нужно добавить какой-либо ввод во внешнюю программу, вы пишете из java в эту программу (так что выход java-программы является входом Process). Вместо этого, если внешняя программа записывает что-то, что вы читаете (так что выход Process является входом для java-программы).
Java Data direction External Process
_____________________________________________________________
write to OutputStream ------------> read from InputStream
read from InputStream <------------ write to OutputStream
Thanks @David Lorenzo MARINO (+1) - вы, кажется, правы, но для меня это ужасно выглядит назад. Приложение, которое я запускаю изнутри Java (в данном конкретном случае, Consul) записывается в STDOUT. Я бы * подумал, что «оболочка Java' Process' »Consul сделает STDOUT доступным через« OutputStream »(это поток символов, отправленных из Consul ** out ** в STDOUT). Это правильно, и когда я могу дать вам зеленый чек за несколько минут, я сделаю это, но для богов Java я говорю это: * проклинайте вас, о, боги Java, у вас есть это в обратном направлении !!! * – smeeb
Я добавил примечание, чтобы объяснить, почему то, что представляет собой вход, действительно является выходным и наоборот –