java socket 以及 流 關閉的問題

2021-06-22 01:16:32 字數 757 閱讀 2121

首先我一下幾個提出問題:稍後再做出解答。

問題一: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...