PipedInputStream - Jak uniknąć „java.io.IOException: Pipe broken”

Mam dwa wątki. Jeden z nich zapisuje do PipedOutputStream, inny odczytuje z odpowiedniego PipedInputStream. Tło jest takie, że jeden wątek pobiera niektóre dane ze zdalnego serwera i multipleksuje je do kilku innych wątków za pośrednictwem potoków strumieniowych.

Problem polega na tym, że czasami (zwłaszcza podczas pobierania dużych plików)(> 50 MB) pliki) dostajęjava.io.IOException: Pipe broken podczas próby odczytu z PipedInputStream.
Javadoc tak mówiA pipe is said to be broken if a thread that was providing data bytes to the connected piped output stream is no longer alive.
To prawda, mój wątek do pisania naprawdę umiera po zapisaniu wszystkich danych w PipedOutputStream.

Jakieś rozwiązania? Jak mogę zapobiec rzucaniu tego wyjątku przez PipedInputStream? Chcę mieć możliwość odczytu wszystkich danych zapisanych w PipedOutputStream, nawet jeśli pisanie wątku zakończyło jego pracę. (Jeśli ktoś wie, jak zachować wątek przy życiu, dopóki wszystkie dane nie zostaną odczytane, to rozwiązanie jest również dopuszczalne).

questionAnswers(3)

yourAnswerToTheQuestion