作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想从进程的输出和错误流中读取并将它们合并到一个文本流中。我的程序是常规的,读起来像这样:
def mergeStream = new ByteArrayOutputStream()
process.waitForProcessOutput(mergeStream, mergeStream)
问题是 ByteArrayOutputStream 不是线程安全的,waitForProcessOutput() 生成两个附加到 mergeStream 的线程。有没有我可以使用的线程安全变体?您还建议我如何控制对 mergeStream 的访问?看起来在实践中字符有时会被此实现删除。
最佳答案
如果 process.waitForProcessOutput()
将 OutputStream
作为参数,您可以简单地使用 OutputStream
的自定义实现,它具有其所有方法同步,并委托(delegate)给包装的 ByteArrayOutputStream
的相应方法。就像 Collections.synchronizedList()
将另一个 List 包装成一个同步的 List 代理。
编辑:
也就是说,阅读 ByteArrayOutputStream 的源代码,它的所有方法都已经同步,因此它已经是线程安全的。您的错误可能来自其他地方。
关于java - 什么是线程安全的 ByteArrayOutputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13167870/
我是一名优秀的程序员,十分优秀!