8
我想讀取進程的輸出和錯誤流,並將它們合併爲一個文本流。我的計劃是在Groovy和讀取這樣的:什麼是線程安全的ByteArrayOutputStream?
def mergeStream = new ByteArrayOutputStream()
process.waitForProcessOutput(mergeStream, mergeStream)
的問題是,ByteArrayOutputStream不是線程安全和waitForProcessOutput()產生兩個線程,其追加到mergeStream。是否有可以使用的線程安全變體?你還建議我如何控制對mergeStream的訪問?看起來實際上字符有時會隨着這個實現而被放棄。
您是否考慮過ProcessBuilder的redirectErrorStream? – artbristol
是的,它*是*線程安全的,或者說它的所有方法都是同步的,'ProcessBuilder.redirectErrorStream()'使你的整個問題變得冗餘。不是一個真正的問題。 – EJP
@EJP - 如果你知道答案,它只是「不是一個真正的問題」 - 否則,這是一個偉大的問題! javadoc沒有說它是同步的 - AFAICT,你必須挖掘來源找出來,並且我沒有打擾過(假設它不是線程安全的,因爲文檔沒有說什麼),你沒有評論。 –