java流關閉
❶ java中為什麼先關閉輸出流後關閉輸入流
不絕對,要看依賴關系,先關被依賴的流,誰是被依賴的,就先關誰,比如代碼中從文件A讀出內容,然後寫入文件B , 這個時候讀A 要用輸入流 ,往B寫要用輸出流,必須要先從A讀出,然後才能往B寫,所以,這個場景下,輸出流 依賴 輸入流,操作完關流的時候就要先關被依賴的輸入流,再關輸出流。
還有,如果關流操作在finally塊中進行,順序就無所謂了。
如果輸入流和輸出流完全沒有依賴關系,那關流順序就更沒關系了,看心情就好。
❷ 大佬們,關於java IO流關閉的一點疑問,求大佬們幫幫忙
如果上面沒有對流進行手動關閉的話,finally方法中的fis一定不為空
❸ java 是什麼控制流的打開和關閉的
您好,提問者:
io:reader、writer和outpustream、inputstream需要打開和關閉。
再就是資料庫connection等都需要及時關閉。
❹ Java中,static代碼塊創建的IO流需要手動關閉嗎
IO 流除了可以手動關閉外,在垃圾回收這個對象的時候也會自動關閉。
但系統進行垃圾回收的時機是不確定的,static 代碼塊執行完後,不會馬上進行回收。在這段時間內,會造成無用的內存及IO等其他資源佔用。所以最好還是用完即關。
推薦寫在 try 里,try 塊執行完自動關閉。
❺ 為什麼在java中打開流後一定要關閉流好像關不關沒有不同,程序的結果都是一樣的。。。
這跟資源的佔用有關
比如你將一個100MB的word文檔轉換成流,然後進行分析存儲到資料庫一樣
它是將這100MB的東西讀到內存,然後進行處理,如果你在使用的時候不關閉
那麼java就認為你是一直在使用
而不進行垃圾回收
那麼就占你100MB的內存
這樣有可能導致內存溢出
❻ java中IO流操作怎樣關閉流
如果 in == null,就說明 in這個引用所指向的對象還沒有被創建,自然 in.close()也就不可能被執行,而且會報異常。我是這樣想的,程序中 如果你先聲明變數
InputStream(或者其他流類型) in = null;
然後執行其他語句,再 in = new 、、、、
在in new之前其他語句出exception,這時流沒有被打開,也就無需關閉,如果不判斷if(null != in) 硬要關閉in就出exception
另外你的代碼按如下寫會更合理:
if(null != in){
try{
in.flush();
in.close();
in = null;
}
catch(IOExection e){};
}
❼ 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。
❽ java 關閉流的作用
關閉流主要是為了釋放資源,雖然java有自動回收垃圾資源的功能,但是如果不關閉流,可能(只是可能)會影響自動回收的效果,造成內存大量佔用。另外一個重要的原因,如果不關閉流,可能會被其他的語句訪問該數據流,造成數據錯誤。
❾ java關閉流的順序影響程序結果
bw是緩沖流,使用bw.write 後,數據並沒有直接寫入txt文件中,而是在bw的緩沖區內,所以這時先關閉輸出流fw,則txt中就是空的了,如果先關閉bw,則緩沖流會在內部先調用bw.flush();將緩沖區的內容輸出到文件中,所以txt才有內容。要解決這個問題,需要在bw.write 後顯示調用bw.flush();這樣先關閉那個流都一樣了
❿ Java中的io流關閉問題
如下例子代碼:
FileInputStream is = new FileInputStream(".");
BufferedInputStream bis = new BufferedInputStream(is);
bis.close();
從設計模式上看:
java.io.BufferedInputStream是java.io.InputStream的裝飾類。
BufferedInputStream裝飾一個 InputStream 使之具有緩沖功能,is要關閉只需要調用最終被裝飾出的對象的 close()方法即可,因為它最終會調用真正數據源對象的 close()方法。
BufferedInputStream的close方法中對InputStream進行了關閉,下面是jdk中附帶的源代碼:
java.io.BufferedInputStream的api:
close
public void close()throws IOException 關閉此輸入流並釋放與該流關聯的所有系統資源。
因此,可以只調用外層流的close方法關閉其裝飾的內層流,驗證例子:
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream("d:\\a.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
BufferedWriter bw = new BufferedWriter(osw);
bw.write("java IO close test");
bw.close();
}
驗證ok