2012-02-10 6 views
6

Quiero unir stderr (getErrorStream) y stdout (getInputStream) de un Process en un solo Stream para consumir en otro lugar. ¿Hay algo en la biblioteca de Java que haga eso por mí?¿Puedo desmultiplexar streams?

Nota: no hay bibliotecas externas. No estoy interesado en la existencia de una solución proporcionada por, digamos, Apache Commons IO. Solo quiero saber si hay algo que venga con JDK.

+1

¿Has probado [ProcessBuilder.redirectErrorStream()] (http://docs.oracle.com/javase/6/docs/api/java/lang/ProcessBuilder.html#redirectErrorStream (boolean))? –

+0

@GabrielBelingueres Creo que es demasiado pronto en el proceso para mí. No creo que pueda pasar la decisión al propietario del 'ProcessBuilder', pero lo investigaré. –

+0

¿tiene que ser fuerte y más dura? –

Respuesta

0

Puede usar un SequenceInputStream para combinar 2 InputStream.

+0

No es satisfactorio, eso no es demultiplexación, solo serialización. –

1

ProcessBuilder.redirectErrorStream(boolean) hace lo que quiere.

public ProcessBuilder redirectErrorStream(boolean redirectErrorStream)

Conjuntos de propiedad redirectErrorStream este proceso del constructor.

Si esta propiedad es true, entonces cualquier salida de error generado por subprocesos posteriormente iniciadas por el método de este objeto start() se fusionará con la salida estándar, para que ambos puedan ser leídos por el método de Process.getInputStream(). Esto facilita la correlación de los mensajes de error con la salida correspondiente. El valor inicial es false.

EDIT: @Since Java 5 o posterior, por lo que debería estar ampliamente disponible.

+0

No funciona para mí: ambas secuencias deben generarse, pasarse a otros objetos por separado y, finalmente, llegar al punto donde tengo que unirme para alimentar otro proceso. –

0

No, no hay nada que haga eso en el JDK (hasta el 6, en el 7 todavía no he examinado todas las clases).

Cuestiones relacionadas