java關閉流
⑴ 為什麼在java中打開流後一定要關閉流好像關不關沒有不同,程序的結果都是一樣的。。。
這跟資源的佔用有關
比如你將一個100MB的word文檔轉換成流,然後進行分析存儲到資料庫一樣
它是將這100MB的東西讀到內存,然後進行處理,如果你在使用的時候不關閉
那麼java就認為你是一直在使用
而不進行垃圾回收
那麼就占你100MB的內存
這樣有可能導致內存溢出
⑵ Java中為什麼先關閉輸出流後關閉輸入流
不絕對,要看依賴關系,先關被依賴的流,誰是被依賴的,就先關誰,比如代碼中從文件A讀出內容,然後寫入文件B , 這個時候讀A 要用輸入流 ,往B寫要用輸出流,必須要先從A讀出,然後才能往B寫,所以,這個場景下,輸出流 依賴 輸入流,操作完關流的時候就要先關被依賴的輸入流,再關輸出流。
還有,如果關流操作在finally塊中進行,順序就無所謂了。
如果輸入流和輸出流完全沒有依賴關系,那關流順序就更沒關系了,看心情就好。
⑶ Java IO流中先關閉輸出流還是先關閉輸入流為什麼
java中需要手動釋放的資源常見的有以下兩個:
流相關資源
流相關資源一般遵循:
1)先開後關,先開的輸入流,再開的輸出流,通過讀取輸入流寫入輸出流中,那麼應該先關輸出流,再關輸入流,但是一般關閉輸入輸出流操作都是在讀寫完成後的finally中執行的,所以即使先關輸入流,再關輸出流也不會任何問題,因為讀寫操作沒有進行了。
2)先關外層,再關內層。如BufferedInputStream包裝了一個FileInputStream,那麼先
關BufferedInputStream,再關FileInputStream。但要注意的是由於一般處理流持有節點流引用,處理流都會在自己的close方法中去關閉節點流,因此我們只要關閉外層的處理流即可,如果多此一舉的關閉節點流反而會報錯。如BufferedInputStream包裝了FileInputStream,我們只要關閉BufferedInputStream即可
3)只關處理流,不關節點流,原因見上述第二條
流相關文章參考:http://blog.csdn.net/u012250875/article/details/78341874
jdbc相關資源
Connection,PrepareStatement,ResultSet三個資源。這三個資源的獲取順序是:
先獲得一個jdbc連接對象Connection,再通過連接對象獲得一個sql預處理對象PrepareStatement,如果是查詢的話最後還會通過PrepareStatement對象獲取一個結果集ResultSet對象,關閉順序與獲取順序正好相反。先關ResultSet,再關PrepareStatement,最後關Connection。