J'observé le même comportement (lecture 0 octets) quand je construis une fenêtre de sortie de la console de swing et fait un lecteur-fil pour stdout et stderr via le code suivant:
this.pi = new PipedInputStream();
po = new PipedOutputStream((PipedInputStream)pi);
System.setOut(new PrintStream(po, true));
Lorsque l'application swing « principale » sorties, et mon La fenêtre de la console est toujours ouverte. Je lis 0 depuis this.pi.read(). Les données lues ont été placées dans la fenêtre de la console, ce qui a entraîné une condition de concurrence. Ignorer simplement le résultat et ne pas mettre à jour la fenêtre de la console a résolu le problème.
Je suis d'accord: > Cette méthode est bloquée jusqu'à ce que les données d'entrée soient disponibles, la fin du fichier est détectée ou une exception est générée. > Si la longueur de b est zéro, aucun octet n'est lu et 0 est retourné; sinon, il y a une tentative de lecture d'au moins un octet. > Si aucun octet n'est disponible car le flux se trouve à la fin du fichier, la valeur -1 est renvoyée; sinon, au moins un octet est lu et stocké dans b. Merci! –