Ho bisogno di generare N thread di consumo, che elaborano simultaneamente lo stesso InputStream, ad esempio: trasformarlo in qualche modo, calcolare il checksum o la firma digitale ecc. Questi consumatori non dipendono l'uno dall'altro e tutti stanno usando librerie di terze parti, che accettano InputStream come fonte di dati.Elaborazione contemporanea di InputStream singolo con utenti indipendenti
Quindi quello che posso fare è - a creare un po 'di attuazione InputStream, che sarà
- lettura blocco di dati provenienti da "genitore" flusso
- consumatori sbloccare
- attendere che tutti i consumatori di leggere il pezzo intero
- leggere prossimo pezzo
pur essendo alla ricerca semplice, si può salire vari problemi come livel ck quando alcuni consumatori muoiono, implementano tutti i metodi InputStream, controllano fork/join dei consumatori stessi usando barriere/latch ecc.
Un amico mi ha detto che è mezz'ora da implementare, ha reso la mia serata.
Preferirei utilizzare qualcosa di abbastanza maturo (googling non è stato fornito con risultati, il mio google-fu non è abbastanza buono?) O non preoccuparti e copiare l'intero flusso "sorgente" in un file temporaneo e usarlo come fonte di dati. Quest'ultima soluzione sembra essere più affidabile, ma potrebbe finire con la creazione di file di gigabyte (durante l'elaborazione dell'audio in streaming, ad esempio).
È possibile scrivere i dati su un file e generare N FileInputStreams? –
@JonLin Come ha detto verso la fine della domanda, può farlo. –