java流的關閉
❶ 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直接return的文件流如何關閉
代碼如下:
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
publicclassApp{
publicstaticvoidmain(String[]args)throwsIOException{
//第一種方式,稍嫌麻煩
FileOutputStreamoutputStream=null;
try{
outputStream=newFileOutputStream(newFile("data.txt"));
outputStream.write(newbyte[]{0x11,0x22,0x33,0x44});
//在這里可以直接return,會調用finally中的代碼
}finally{
if(outputStream!=null){
try{
outputStream.close();
}catch(IOExceptione){
}
}
}
//第二種方式,比較簡潔,不用顯式調用close(),會自動調用close();
try(FileInputStreaminputStream=newFileInputStream(newFile("data.dat"))){
byte[]buf=newbyte[4];
inputStream.read(buf);
//可以在這里調用return,在這個{}代碼塊結束時,close會自動執行,
}
}
}