Мне нужно создать N потоков-потребителей, которые одновременно обрабатывают один и тот же InputStream, например, -каким-то образом преобразуют его, вычисляют контрольную сумму или цифровую подпись и т. д. Эти потребители не зависят друг от друга, и все они используют сторонние -сторонние библиотеки, которые принимают InputStream в качестве источника данных.
Итак, что я могу сделать, так это -создать некоторую реализацию InputStream, которая будет
хотя это выглядит просто, это может привести к различным проблемам, таким как живая блокировка, когда определенный потребитель умирает, реализовать все методы InputStream, управлять разветвлением/объединением самих потребителей с помощью барьеров/защелок и т. д.
Один приятель сказал мне, что это полчаса на реализацию, это сделало мой вечер.
Я бы предпочел либо использовать что-то достаточно зрелое, (гугление не дало результатов, таким образом, мое гугление -фу недостаточно хорошо? )или не заморачивайтесь и скопируйте весь "исходный" поток во временный файл и используйте его как источник данных. Последнее решение кажется более надежным, т.но может привести к созданию гигабайтных файлов (при обработке потокового аудио, например ).