Я наблюдал такое же поведение (чтение 0 байт), когда строил окно вывода консоли Swing и создал поток чтения для stdout и stderr с помощью следующего кода:
this.pi = new PipedInputStream();
po = new PipedOutputStream((PipedInputStream)pi);
System.setOut(new PrintStream(po, true));<br>
Когда «основное» приложение свинга закрывается, и мое консольное окно все еще открыто, я читаю 0 из this.pi.read ().
Считанные данные помещались в окно консоли, что приводило к состоянию гонки, каким-то образом, просто игнорируя результат и не обновляя окно консоли, решали проблему.