本文目錄一覽:
- 1、java;怎麼關閉流文件?
- 2、java程序中的流都要統統關閉嗎?有沒有先後順序??
- 3、Java IO流中先關閉輸出流還是先關閉輸入流?為什麼?
- 4、java關閉流的順序影響程序結果
- 5、java中IO流操作怎樣關閉流
java;怎麼關閉流文件?
最好聲明在一個特定的作用域裏面,這樣作用域一到自己就釋放掉了,也就不存在什麼你來關閉了,因為很多內置類析構函數都是有很完整的系統垃圾回收機制。不要做重複的事,當然如果你需要關閉之後在打開,你可以使用手動關閉。
java程序中的流都要統統關閉嗎?有沒有先後順序??
理論上都得關閉,流就是把硬盤上的東西放到內存上,不關就會浪費資源
關當然有先後順序,我找了點解釋:
一般情況下是:先打開的後關閉,後打開的先關閉
另一種情況:看依賴關係,如果流a依賴流b,應該先關閉流a,再關閉流b
例如處理流a依賴節點流b,應該先關閉處理流a,再關閉節點流b
當然完全可以只關閉處理流,不用關閉節點流。處理流關閉的時候,會調用其處理的節點流的關閉方法
如果將節點流關閉以後再關閉處理流,會拋出IO異常
Java IO流中先關閉輸出流還是先關閉輸入流?為什麼?
java中需要手動釋放的資源常見的有以下兩個:
流相關資源
流相關資源一般遵循:
1)先開後關,先開的輸入流,再開的輸出流,通過讀取輸入流寫入輸出流中,那麼應該先關輸出流,再關輸入流,但是一般關閉輸入輸出流操作都是在讀寫完成後的finally中執行的,所以即使先關輸入流,再關輸出流也不會任何問題,因為讀寫操作沒有進行了。
2)先關外層,再關內層。如BufferedInputStream包裝了一個FileInputStream,那麼先
關BufferedInputStream,再關FileInputStream。但要注意的是由於一般處理流持有節點流引用,處理流都會在自己的close方法中去關閉節點流,因此我們只要關閉外層的處理流即可,如果多此一舉的關閉節點流反而會報錯。如BufferedInputStream包裝了FileInputStream,我們只要關閉BufferedInputStream即可
3)只關處理流,不關節點流,原因見上述第二條
流相關文章參考:
jdbc相關資源
Connection,PrepareStatement,ResultSet三個資源。這三個資源的獲取順序是:
先獲得一個jdbc連接對象Connection,再通過連接對象獲得一個sql預處理對象PrepareStatement,如果是查詢的話最後還會通過PrepareStatement對象獲取一個結果集ResultSet對象,關閉順序與獲取順序正好相反。先關ResultSet,再關PrepareStatement,最後關Connection。
java關閉流的順序影響程序結果
bw是緩衝流,使用bw.write 後,數據並沒有直接寫入txt文件中,而是在bw的緩衝區內,所以這時先關閉輸出流fw,則txt中就是空的了,如果先關閉bw,則緩衝流會在內部先調用bw.flush();將緩衝區的內容輸出到文件中,所以txt才有內容。要解決這個問題,需要在bw.write 後顯示調用bw.flush();這樣先關閉那個流都一樣了
java中IO流操作怎樣關閉流
in=null時的意思就是說流還沒有被初始化時就報異常了,此時流為空值。對於空值的流是不能關閉的,否則會出空指針異常。所以之前要判斷一下。
原創文章,作者:DVWA,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/140239.html
微信掃一掃
支付寶掃一掃