什么是线程安全的ByteArrayOutputStream?

dro*_*del 8 java groovy

我想从进程的输出和错误流中读取并将它们合并为一个文本流.我的程序是groovy,如下所示:

def mergeStream = new ByteArrayOutputStream()
process.waitForProcessOutput(mergeStream, mergeStream)
Run Code Online (Sandbox Code Playgroud)

问题是ByteArrayOutputStream不是线程安全的,而waitForProcessOutput()生成两个附加到mergeStream的线程.我可以使用线程安全的变体吗?你怎么建议我控制对mergeStream的访问?看起来在实践中,有时会使用此实现删除字符.

JB *_*zet 7

如果process.waitForProcessOutput()采用OutputStreamas参数,您可以简单地使用自定义实现OutputStream,并将其所有方法同步,并委托给包装的相应方法ByteArrayOutputStream.就像Collections.synchronizedList()将另一个List包装到同步的List代理中一样.

编辑:

也就是说,读取ByteArrayOutputStream的源代码,其所有方法都已经同步,因此它已经是线程安全的.您的错误可能来自其他地方.