Necesito generar N hilos de consumo, que procesan el mismo InputStream simultáneamente, por ejemplo, transformarlo de alguna manera, calcular suma de comprobación o firma digital, etc. Estos consumidores no dependen el uno del otro y todos ellos están utilizando bibliotecas de terceros, que aceptan InputStream como fuente de datos.Procesamiento concurrente de InputStream individual con consumidores independientes
Entonces, ¿qué puedo hacer es - crear alguna implementación de InputStream, que se
- lectura fragmento de datos de "padre" corriente
- consumidores desbloquear
- espera hasta que todos los consumidores leer todo el trozo
- leído siguiente parte
al tiempo que busca sencilla, puede elevarse varios problemas como livelo ck cuando muere un determinado consumidor, implementa todos los métodos de InputStream, controla el tenedor/únete a los consumidores usando barreras/pestillos, etc.
Un amigo me dijo que es media hora para implementarlo, hizo mi noche.
Prefiero usar algo lo suficientemente maduro (google no vino con resultados así, mi google-fu no es lo suficientemente bueno?) O no molestar y copiar toda la secuencia de "fuente" en un archivo temporal y usarlo como fuente de datos. La última solución parece ser más confiable, pero puede terminar en la creación de archivos de gigabyte (al procesar audio de transmisión, por ejemplo).
se puede escribir los datos en un archivo y desovar N FileInputStreams? –
@JonLin Como dijo hacia el final de la pregunta, él puede. –