Одновременная обработка одного InputStream с независимыми потребителями

Мне нужно создать N потребительских потоков, которые одновременно обрабатывают один и тот же InputStream, например, каким-то образом преобразовать его, вычислить контрольную сумму или цифровую подпись и т. Д. Эти потребители не зависят друг от друга, и все они используют сторонние библиотеки, которые принимают InputStream как источник данных.

Итак, что я могу сделать - создать некоторую реализацию InputStream, которая будет

read chunk of data from "parent" stream unblock consumers wait until every consumer read the whole chunk read next chunk

Несмотря на простоту, могут возникнуть различные проблемы, такие как блокировка в реальном времени, когда умирает определенный потребитель, реализация всех методов InputStream, управление ветвлением / соединением самих потребителей с использованием барьеров / защелок и т. д.

Один приятель сказал мне, что это заняло полчаса, это мой вечер.

Я предпочел бы либо использовать что-то достаточно зрелое (поиск в Google не дал результатов, таким образом, мой google-fu не достаточно хорош?), Либо не беспокоить и не копировать весь "исходный код". поток во временный файл и использовать его в качестве источника данных. Последнее решение кажется более надежным, но может привести к созданию гигабайтных файлов (например, при обработке потокового аудио).

Ответы на вопрос(3)

Ваш ответ на вопрос