2015-05-04 34 views
0


我有這個我最近偶然發現的問題。
我正在使用ProcessBuilder來調用外部進程。進程可以返回人可讀的字符串或壓縮的內容。
代碼看起來是這樣的:
向消費者提供來自ProcessBuilder的InputStream

ProcessBuilder pb = new ProcessBuilder(args); 
pb.redirectErrorStream(true); 
Process p = pb.start(); 
p.waitFor(); 
return p.getInputStream(); 


這是確定爲較小的輸入,但對於較大的一個處理塊,等待緩衝器被清空。消費者代碼已經實現,那麼是否有另一種方法可以從InputStream這個函數中重新執行?

回答

0

問題是進程將無法寫入輸入流,如果消費線程不使用超出緩衝區大小的輸入流中的值。

如果您不想更改使用者代碼,我可以想到的一種解決方案是將所有進程輸入流讀入到StringBuffer中,然後將輸入流返回給StringBuffer而不是進程輸入流。 PS:我們正在讀取不同線程中的輸入流以避免阻塞執行的主線程。

相關問題