2013-03-08 35 views
0

我有一個ProcessBuilder的包裝,這樣任何需要運行進程的類都可以使用它。
該類傳遞進程和參數並返回結果。
結果將是Process的輸出流或我猜測的errorstream。
我的問題是如何在線程間傳遞流?我的意思是我在做類似如下:如何將一個流從一個線程傳遞到另一個線程?可能是我應該以不同的方式做到這一點?

String line=null; 
try { 
    while ((line = br.readLine()) != null) { 
      if (pw != null) 
        pw.println(line);     
     } 
} catch (IOException e) {    
    e.printStackTrace(); 
} 
if (pw != null) 
     pw.flush(); 

我想我應該flush但不關閉蒸汽吧?或者我應該以不同的方式去做?

+0

您是否試圖在多個線程之間同時訪問相同的流,或者只是在不同的時間切換流以供不同的線程使用?另外,你是否遇到過[Commons Exec](http://commons.apache.org/exec/)?它的API通常比'ProcessBuilder'更簡單。 – hertzsprung 2013-03-08 10:38:45

+0

@ hertzsprung.No.I想要將流程從綁定到Process''InputStream'的線程傳遞給最初想要運行進程的調用者線程,'waitFor'進程完成 – Jim 2013-03-08 10:40:33

+0

你是否試圖確定誰應該負責關閉流?在你當前的代碼中,你只需要將流數據讀入一行,大概可以通過。我認爲這不是你想要的? – 2013-03-08 11:49:59

回答

2

您可以將數據寫入ByteArrayOutputStream並將其傳遞給調用者。完成寫入BAOS後,關閉輸入流並將輸出流傳遞給調用者。調用者有責任關閉/沖洗BAOS並釋放與其相關的任何內存。

相關問題