Запуск процесса с наследованным stdin/stdout/stderr в Java 6

Обратите внимание, что урожай позволяет Вам делать вещи "ленивым" способом. Ленивым я подразумеваю, что оценка следующего элемента в IEnumberable не сделана, пока элемент на самом деле не требуют. Это позволяет Вам питание сделать несколько разных вещей. Каждый - это, Вы могли привести к бесконечно длинному списку без потребности на самом деле сделать бесконечные вычисления. Во-вторых, Вы могли возвратить перечисление функциональных приложений. Функции были бы только применены, когда Вы выполняете итерации через список.

28
задан John Calsbeek 13 September 2008 в 04:28
поделиться

1 ответ

Вариант ответа Джона, который компилируется и не требует использования Commons IO:

private static void pipeOutput(Process process) {
    pipe(process.getErrorStream(), System.err);
    pipe(process.getInputStream(), System.out);
}

private static void pipe(final InputStream src, final PrintStream dest) {
    new Thread(new Runnable() {
        public void run() {
            try {
                byte[] buffer = new byte[1024];
                for (int n = 0; n != -1; n = src.read(buffer)) {
                    dest.write(buffer, 0, n);
                }
            } catch (IOException e) { // just exit
            }
        }
    }).start();
}
13
ответ дан 28 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: