Jednoczesne przetwarzanie pojedynczego InputStream z niezależnymi konsumentami

Muszę utworzyć N wątków konsumenckich, które przetwarzają jednocześnie ten sam strumień wejściowy, np. - przekształcić go w jakiś sposób, obliczyć sumę kontrolną lub podpis cyfrowy itp. Konsumenci ci nie zależą od siebie i wszystkie z nich korzystają z bibliotek innych firm, które akceptują InputStream jako źródło informacji.

To, co mogę zrobić, to - stworzyć jakąś implementację InputStream, która będzie

odczytać fragment danych ze strumienia „nadrzędnego”odblokowuje konsumentówpoczekaj, aż każdy konsument przeczyta cały fragmentprzeczytaj następny fragment

wyglądając prosto, może rodzić różne problemy, takie jak blokowanie się, gdy umierają niektórzy konsumenci, wdrażać wszystkie metody InputStream, kontrolować widelec / dołączać samych konsumentów za pomocą barier / zatrzasków itp.

Jeden kolega powiedział mi, że wdrożenie zajmuje pół godziny, to był mój wieczór.

Wolę użyć wystarczająco dojrzałego (googling nie przyniósł wyników, więc moje google-fu nie jest wystarczająco dobre?) Lub nie zawracać sobie głowy i kopiować całego strumienia „źródłowego” do pliku tymczasowego i używać go jako źródło informacji. To ostatnie rozwiązanie wydaje się być bardziej niezawodne, ale może skończyć się tworzeniem plików gigabajtowych (na przykład podczas przetwarzania strumieniowego audio).

questionAnswers(3)

yourAnswerToTheQuestion