Ⅰ java關閉IO流的時候Socket也同時關閉
樓主解決了么,我想到一個辦法:
服務端:就是每次接收到一個客戶端請求以後,都重新啟動一個線程用於邏輯處理,處理完畢後關閉該線程會自動關閉。
客戶端:每次發送/接收數據都新建一個socket ,發送完/傳輸完就關閉當前socket
Ⅱ Java中,static代碼塊創建的IO流需要手動關閉嗎
IO 流除了可以手動關閉外,在垃圾回收這個對象的時候也會自動關閉。
但系統進行垃圾回收的時機是不確定的,static 代碼塊執行完後,不會馬上進行回收。在這段時間內,會造成無用的內存及IO等其他資源佔用。所以最好還是用完即關。
推薦寫在 try 里,try 塊執行完自動關閉。
Ⅲ 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
Ⅳ Java中怎麼判斷一個io流是否已經關閉
try{
inputstream.read();
Syste.out.println("流未關閉");
}cache(Exceptione){
Syste.out.println("流已關閉");
}
Ⅳ 關於java中io流的關閉問題,部分代碼,這種情況用不用關閉new FileReader(file)
是的,你的new FileReader(file)是一個匿名對象。
JVM中對於那些打開了沒有關閉的IO文件流,會在不再被使用的情況下,等到下次做Full GC的時候把他們全部回收,盡量少使用這種寫法。文章來自:http://blog.csdn.net/kongxx/article/details/6405914
Ⅵ 大佬們,關於java IO流關閉的一點疑問,求大佬們幫幫忙
如果上面沒有對流進行手動關閉的話,finally方法中的fis一定不為空
Ⅶ Java socket中關閉IO流後,發生什麼事
為了方便講解,我們把DataOutputstream dout = new DataOutputStream(new BufferedOutputStream(mySocket.getOutputStream()));中的dout做為Socket輸出流的代言。同樣的,din是輸入流的代言。
可以造成dout被關閉的操作有:
1、調用dout.close();或din.close();因為使用這種流關閉,會造成socket被關閉,所以輸入輸出流都將不可再用。
2、調用socket.close();
3、調用socket.shutdownOutputStream();單方面關閉dout,此時din還可正常使用。
Ⅷ java輸出多個文件時如何避免多次開關io流
既然是輸出多個文件,那麼輸出流肯定是多個。輸出完一個文件後關閉對應的流是肯定的。
至於輸入流,如果是一個文件的話,可以先用一個輸入流將文件讀取到內存里,然後這個輸入流就用不到了可以關閉了。如果是從多個文件里讀取的話,那還是會有多個輸入流,所以還是需要多次關閉。
Ⅸ 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流的關閉問題。
你BufferedReader是通過fileReader來的,相當於你關閉br後就直接關閉了FileReader,最後建議你把br=null;
和這個相反你可以參考一下rs和con的關系