2012-07-01 63 views
0

是否有任何理由在StreamWriter類上調用close方法?爲什麼我必須這樣做?如果我不關閉StreamWriter,我會得到某種未定義的行爲?在Java中使用StreamWriter.close()

+0

'streamWriter'哪個包,哪裏? – nullpotent

+2

@smallB:你在問一個不存在的類。我們必須猜測,「streamWriter類」實際上是java.io.OutputStreamWriter(除非你指的是其他類)。 –

+0

#JBNizet由streamWriter我的意思是任何streamWriter。 – smallB

回答

8

假設你在談論java.io.OutputStreamWriter,是的,你應該關閉它,在finally塊中,當你不想再寫更多東西時。這允許底層OutputStream被關閉。如果底層OutputStream是FileOutputStream,它將釋放文件描述符(這是一個有限的OS資源),並允許其他aps讀取文件。如果它是一個SocketOutputSTream,它將向另一方發出信號,表示它不應該期望套接字輸入流有更多的東西。

通常,流和讀者/作者必須始終正確關閉。如果使用Java 7,請使用新的try-with-resources構造來確保它自動爲您完成。

3

操作系統管理文件,並且如果在java文件未關閉,系統資源將丟失。

在Java 7中,你可以使用,無論

try (OutputStreamWriter outWriter = new OuputStreamWriter(outStream, "UTF-8")) { 
    ... 
} 

沒有close。 (輸出流和作家執行Closeable)。

順便說一句@PriestVallon只是試圖讓你制定一個更好/有吸引力的回答你的問題。如你所見,對此的「輕微」迴應可能會被誤解。

1

寫入和讀取流通常涉及os資源的使用,如套接字,文件句柄等。如果您正在寫一個流,您應該關閉它,im命令釋放您可能獲得的資源(這取決於您在流下面使用的實際資源)。有時關閉流式編寫器涉及釋放資源的獨佔分配,或者將臨時數據清除到流中。 有時候關閉是無效的,它取決於你擁有的流的種類,但是界面必須處理所有必須關閉流的情況。