8

我想从进程的输出和错误流中读取并将它们合并到一个文本流中。我的程序很时髦,如下所示:

def mergeStream = new ByteArrayOutputStream()
process.waitForProcessOutput(mergeStream, mergeStream)

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

4

1 回答 1

7

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

编辑:

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

于 2012-10-31T21:50:09.137 回答