如果我調用一個BufferedReader方式如下:關閉一個BufferedReader
Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());
請問JVM知道自動關閉它在不使用時?如果不是,我該如何關閉它?
如果我調用一個BufferedReader方式如下:關閉一個BufferedReader
Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());
請問JVM知道自動關閉它在不使用時?如果不是,我該如何關閉它?
如果您使用的是java 7或更高版本,並且您的代碼位於try catch resource
區塊,則它是Auto closes
。
如果在以下版本中,您必須關閉close()。爲此,您必須更改當前的使用方式並獲取參考。
用於AutoCloseable的+1 –
不要鏈接它們,聲明和分配變量,然後在使用後關閉它。
InputStreamReader isReader;
BufferedReader bfReader;
try {
isReader = new InputStreamReader(System.in);
bfReader = new BufferedReader(isReader).readLine();
} catch (Exception e) {
// handle as per the requirement.
} finally {
bfReader.close();
}
如果您使用java 7,那麼,如果您使用try子句定義,那麼它們將自動關閉。檢查here更多細節
試戴與資源語句聲明一個 或多個資源的try語句。資源是作爲一個對象,必須在程序結束後關閉 。試用資源 語句確保在 語句結束時關閉每個資源。任何實現了java.lang.AutoCloseable的對象,其中包括所有實現java.io.Closeable的對象,都可以作爲 資源使用。
它說[這裏](http://stackoverflow.com/questions/1388602/do-i-need-to-close-both-filereader-and-bufferedreader?rq=1)關閉BufferedReader會關閉InputStreamReader爲好。 – user2789772
確實如此。 1)你應該只關閉這種類型的外部裝飾器,這裏是BufferedReader。 2)你當然不會推薦那個catch塊被忽略,對嗎? 3)我通常在結束之前檢查是否爲空。請記住,新手將從字面上理解你的代碼,包括空的catch塊。 –
@HovercraftFullOfEels:應按照他的要求處理問題所有者。 –
小心關閉任何包裝'System.in'的'InputStream'或'Reader'。那也將被關閉。 –