8
我想读取进程的输出和错误流,并将它们合并为一个文本流。我的计划是在Groovy和读取这样的:什么是线程安全的ByteArrayOutputStream?
def mergeStream = new ByteArrayOutputStream()
process.waitForProcessOutput(mergeStream, mergeStream)
的问题是,ByteArrayOutputStream不是线程安全和waitForProcessOutput()产生两个线程,其追加到mergeStream。是否有可以使用的线程安全变体?你还建议我如何控制对mergeStream的访问?看起来实际上字符有时会随着这个实现而被放弃。
您是否考虑过ProcessBuilder的redirectErrorStream? – artbristol
是的,它*是*线程安全的,或者说它的所有方法都是同步的,'ProcessBuilder.redirectErrorStream()'使你的整个问题变得冗余。不是一个真正的问题。 – EJP
@EJP - 如果你知道答案,它只是“不是一个真正的问题” - 否则,这是一个伟大的问题! javadoc没有说它是同步的 - AFAICT,你必须挖掘来源找出来,并且我没有打扰过(假设它不是线程安全的,因为文档没有说什么),你没有评论。 –