首先我一下幾個提出問題:稍後再做出解答。
問題一:a如果僅僅將輸入流關閉(ina.close()),對a與b之間的連線是否有影響?
a能否再次獲得輸入流(ina = socketa.getinputstream())?
是否a還可以傳送資料,因為其輸出流沒有關閉?
問題二:a如果僅僅將輸出流關閉呢?
問題三:a如果將輸入輸出流都關閉,socket還有效嗎?
如果無效是否可以省略socket.close().
回答:經過測試,發現
1. ina.close();
socket.getoutputstream();
這都出現異常。
2. ina.close();
ina = socket.getinputstream();
經過上述兩條,可以得出結論:
1.輸入流或者輸出流只要一者關閉,兩個流以及socket都不可以用了。
2.最好的做法是,要關閉則一起關閉:
如:ina.close();
outa.close();
socket.close();
最後需要注意的是:
socket相關的流的讀是阻塞的,也就是說。a不要輸入流關閉前時,要考慮b端的輸出流是否還
需 要寫。否者,b端一直等待a端接收,而a端卻接受不了,b一直阻塞。
同樣,a端將輸出流關閉了,b端卻一直在讀,卻讀不到內容,一直阻塞。
上述兩種情況會跳出一大堆異常。
setbuf關閉流緩衝
開啟和關閉緩衝機制。功 能 把緩衝區與流相聯 用 法 void setbuf file steam,char buf 說明 setbuf函式具有開啟和關閉緩衝機制。為了帶緩衝進行i o,引數buf必須指向乙個長度為bufsiz 定義在stdio.h標頭檔案中 的緩衝區。通常在此之後該流就是全緩衝的,...
異常謎題之關閉流
static void copy string src,string dest throws ioexception finally 上面這個方法會不會出現意外?會!問題就在close方法上面,如果in.close方法出現異常,下面的根本就沒法執行了。所以改正如下 finally catch ioe...
SpringMVC檔案上傳關閉流
使用springmvc 檔案上傳時。io的關閉 springmvc提供了files.transferto new file c 12.jpg 內部方法如下 if dest.exists dest.delete 巧妙之處的設計 public void transferto file dest thro...