[英]Should I always close BufferedReader?
這是一行將文件讀入List
:
List<String> lines =
new BufferedReader(
new InputStreamReader(classLoader.getResourceAsStream(fileName)))
.lines()
.collect(Collectors.toList());
這是正確的還是我應該將BufferedReader
分配給變量以便以后關閉它?
您應該始終關閉資源。 對於僅快速使用幾個文件的小程序來說,關閉可能不是一個大問題,因為大多數成熟的操作系統會在進程完成時為您關閉文件。 但是,一次打開的文件數量通常有限制。 整潔很好,所以當你開始編寫更大的程序時,你不會達到這些限制。 還有其他類型的資源,如網絡和串行端口,您可能希望在程序完成后讓其他人使用它們,即使它仍在運行。
手動關閉文件的另一種方法是使用try-with-resources語法,這可確保即使發生錯誤也能正確關閉文件:
List<String> lines;
try(BufferedReader reader = new BufferedReader(
new InputStreamReader(classLoader.getResourceAsStream(fileName)))) {
lines = reader.lines().collect(Collectors.toList());
}
好吧,在你的具體例子中,流被打開了
classLoader.getResourceAsStream(fileName)
永遠不會關閉。 必須關閉此流 - 它很可能是本地系統中的文件句柄。 您可以通過關閉BufferedReader
來關閉它,它關閉包裝的InputStreamReader
,它關閉底層的InputStream
。 您也可以存儲對原始InputStream
的引用,並僅關閉它。
另請參閱try-with-resources ,這可能會讓您在這里更輕松。
我糾正了
從文檔:Streams有一個close()方法並實現AutoCloseable接口,但幾乎所有的流實例實際上都不需要在使用后關閉。
通常,只有源為IO通道的流(例如BufferedReader.lines)才 需要關閉。
大多數流都由集合,數組或生成函數支持,不需要特殊的資源管理。 如果流確實需要關閉,則可以在try-with-resources語句中將其聲明為資源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.