Mi piacerebbe leggere dall'output di un processo e dai flussi di errore e unirli in un unico flusso di testo. Il mio programma è in Groovy e si legge come questo:Che cos'è un ByteArrayOutputStream sicuro per i thread?
def mergeStream = new ByteArrayOutputStream()
process.waitForProcessOutput(mergeStream, mergeStream)
Il problema è che ByteArrayOutputStream non è thread-safe e waitForProcessOutput() genera due fili che aggiungere al mergeStream. C'è una variante thread-safe che posso usare? In quale altro modo si consiglia di controllare l'accesso a mergeStream? Sembra che in pratica i personaggi vengano talvolta abbandonati con questa implementazione.
Avete considerato il redirectErrorStream di ProcessBuilder? – artbristol
Sì * è * thread safe, o meglio tutti i suoi metodi sono sincronizzati, e 'ProcessBuilder.redirectErrorStream() 'rende ridondante l'intera domanda. Non è una vera domanda. – EJP
@EJP - è solo "non una vera domanda" se conosci la risposta - altrimenti, è una GRANDE domanda! Javadoc non dice nulla sul fatto che sia sincronizzato - AFAICT, devi scavare nella fonte per scoprirlo, e non mi sarei mai preoccupato (supponendo che non fosse a rischio, dal momento che il doc non ha detto nulla) se non avessi commentato. –