錯誤案例
常見的一種寫法,針對每個catch都進行一次io流關閉。在關閉過程也未進行io流的空值判斷。
try{ URL url = new URL("http://pm.china.alibaba.com/" + memberId); URLConnection conn = url.openConnection(); reader.close(); } catch (MalformedURLException e) { } catch (IOException e) { try { reader.close(); } catch (IOException e1) { } }
錯誤分析
使用catch異常的方式關閉io流,需要注意catch的分支必須得寫全,而且需要針對空值,流關閉異常進行處理,導致代碼不是很優雅。 也很容易造成io流沒有正常關閉,出現open too many files的情況。
正確用法
1. 在finnally 中關閉io流,避免catch分支的遺漏 2. 使用一些utils關閉io流
try{ URL url = new URL("http://pm.china.alibaba.com/); URLConnection conn = url.openConnection(); } catch (Exception e) { // do log xxxx } finally { Ioutils.closeQuietly(reader) }