我有一個Java程序(包括其他東西)使用輸入流從外部Python應用程序讀取。閱讀外部過程錯誤流嚴重影響性能
下面是我用讀它的代碼:
InputStreamReader isr = new InputStreamReader(p.getInputStream()),
isrError = new InputStreamReader(p.getErrorStream());
BufferedReader br = new BufferedReader(isr), brError = new BufferedReader(isrError);
new Thread() {
@Override
public void run() {
try {
while (brError.readLine() != null);
} catch (Exception e) {
}
}
}.start();
while ((line = br.readLine()) != null) { //line is a previously declared String
//do whatever with line
}
創建線程讀取錯誤流過,因爲Python應用程序時出現錯誤(我不能編輯它拋出的錯誤,它是第三方軟件),並且由於某種原因,如果我不讀取ErrorStream,InputStream最終會被阻塞。
有什麼辦法可以讓while (brError.readLine() != null);
對性能影響較小?
現在我正在看VisualVM的性能,而Java軟件通常保持在0-5%的CPU使用率之間,這是相當不錯的,但是這個循環使用的循環的60-65%左右這個線程,這是唯一的功能是防止主循環阻塞。我需要儘可能地提高性能(這正在進入工業生產線,所以正確使用資源非常重要)。
謝謝大家。
但我真的不在乎錯誤(我可能應該在之前提到過)。我只是「讀」它們,以便它們不會阻塞實際的InputStream,但我根本不關心錯誤。 – Tuzane
@Mayuso然後重定向到'/ dev/null'? – Kayaman
這實際上是有道理的,會比我目前的解決方案表現更好嗎?我想我應該試試。 – Tuzane