關閉流我得到FindBugs的嚴重錯誤:方法可能無法在例外
的方法創建一個IO流對象,不將其分配到任何領域,它傳遞給其他的方法,或歸還,並且不會在方法外的所有可能的異常路徑上關閉它。這可能會導致文件描述符泄漏。使用finally塊來確保流被關閉通常是一個好主意。
try {
...
stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
...
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
if (stdError != null) {
stdError.close();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
我需要關閉InputStreamReader
也或p.getErrorStream
(它返回InputStream
)?
你和findbugs在技術上是正確的。但是,BufferedReader構造函數失敗的唯一方法是使用'Error';例如OOME或SOE。應用程序不太可能嘗試從其中一箇中恢復,因此流的泄漏不太可能發生。 – 2010-04-17 14:53:03