Processamento simultâneo de um único InputStream com consumidores independentes

Eu preciso gerar N threads de consumo, que processam o mesmo InputStream simultaneamente, por exemplo - transformá-lo de alguma forma, calcular checksum ou assinatura digital, etc. Esses consumidores não dependem uns dos outros e todos eles estão usando bibliotecas de terceiros, que aceitam InputStream como Fonte de dados.

Então o que eu posso fazer é - criar alguma implementação do InputStream, que

ler pedaços de dados do fluxo "pai"desbloquear os consumidoresespere até que cada consumidor leia o pedaço inteiroleia o próximo pedaço

embora pareça simples, pode surgir vários problemas como o livelock quando determinado consumidor morre, implementar todos os métodos InputStream, controlar o fork / join dos próprios consumidores usando barreiras / travas, etc.

Um amigo me disse que é meia hora para implementar, fez minha noite.

Eu preferiria usar alguma coisa madura o suficiente (googling não veio com resultados assim, meu google-fu não é bom o suficiente?) Ou não se incomodar e copiar todo o fluxo de "fonte" em um arquivo temporário e usá-lo como Fonte de dados. A última solução parece ser mais confiável, mas pode acabar criando arquivos gigabytes (ao processar streaming de áudio, por exemplo).

questionAnswers(3)

yourAnswerToTheQuestion