2010-07-23 5 views
3

J'essaie de lire à partir de deux flux d'entrée différents (stdin et stderr d'une application enfant) et de les imprimer dans un cadre de combinaison. Je n'ai jamais fait cela auparavant et je m'interroge sur les meilleures pratiques.Java Non-bloquant Lecture

Je peux générer deux threads et les laisser tous les deux bloquer sur le flux d'entrée. Y a-t-il un meilleur moyen?

Merci!

+0

Avez-vous besoin de pouvoir distinguer les données de stdin et de stderr? Si ce n'est pas le cas, vous pouvez utiliser ['ProcessBuilder.redirectErrorStream'] (http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/lang/ProcessBuilder.html#redirectErrorStream%28boolean % 29) pour rediriger stderr vers le flux stdin. –

Répondre

-2

Je pense que votre meilleure stratégie serait d'utiliser des classes dans le paquet java.nio. Vérifiez this example sur.

+0

Impossible. Il utilise les flux d'un ProCess. Vous ne pouvez pas utiliser NIO sur ceux-ci. – EJP

1

Votre approche est correcte, mais si vous tentez de combiner deux flux, vous risquez de rencontrer des problèmes avec la sortie/l'erreur.

Peut-être vérifier Apache commons-exec qui est une bibliothèque décent pour gérer l'appel de processus et la capture de sortie/erreur. Sous le capot, il fonctionne exactement comme vous le suggérez, en forçant des threads qui lisent InputStream (s).

-1

ayant deux threads est la seule solution.

+0

Non, ce n'est pas le cas. Voir au dessus. – EJP