Могу ли я демультиплексировать потоки? - PullRequest
6 голосов
/ 10 февраля 2012

Я хочу объединить stderr (getErrorStream) и stdout (getInputStream) из Process в один Stream для использования в другом местеЕсть ли что-нибудь в библиотеке Java, которая сделает это для меня?

Примечание: нет внешних библиотек .Меня не интересует существование решения, предоставляемого, скажем, Apache Commons IO.Я только хочу знать, есть ли что-то, что идет с JDK.

Ответы [ 3 ]

1 голос
/ 10 февраля 2012

ProcessBuilder.redirectErrorStream(boolean) делает то, что вы хотите.

public ProcessBuilder redirectErrorStream(boolean redirectErrorStream)

Устанавливает свойство redirectErrorStream этого компоновщика процессов.

Если это свойство true, то любой вывод ошибок, сгенерированный подпроцессами, впоследствии запущенными методом start() этого объекта, будет объединен со стандартным выводом, так что оба могут быть прочитаны с использованием метода Process.getInputStream(). Это облегчает корреляцию сообщений об ошибках с соответствующим выводом. Начальное значение false.

РЕДАКТИРОВАТЬ: @ С тех пор Java 5 или более поздняя версия должна быть широко доступна.

0 голосов
/ 04 апреля 2012

Нет, в JDK нет такой вещи (до 6, в 7 я еще не смотрел каждый класс).

0 голосов
/ 10 февраля 2012

Вы можете использовать SequenceInputStream для объединения 2 InputStream.

...