我想从进程的输出和错误流中读取并将它们合并到一个文本流中。我的程序是groovy,读起来像这样:
def mergeStream = new ByteArrayOutputStream()
process.waitForProcessOutput(mergeStream, mergeStream)
问题是ByteArrayOutputStream不是线程安全的,而waitForProcessOutput()会生成两个附加到mergeStream的线程。我可以使用线程安全的变体吗?你怎么建议我控制对mergeStream的访问?看起来在实践中,有时会使用此实现删除字符。
答案 0 :(得分:7)
如果process.waitForProcessOutput()
以OutputStream
作为参数,您可以简单地使用OutputStream
的自定义实现,其所有方法都已同步,并委托给包装{的相应方法{1}}。就像ByteArrayOutputStream
将另一个List包装到同步的List代理中一样。
编辑:
也就是说,读取ByteArrayOutputStream的源代码,其所有方法已经同步,因此它已经是线程安全的。您的错误可能来自其他地方。