簡體   English   中英

我應該總是關閉BufferedReader嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM