我只是想知道當我們調用關閉與socket相關的inputStream和outStream時,java會做什麼。與socket上的close調用有什麼不同,例如Socket.close()。直接關閉Input/OutputStream和關閉Socket有什麼區別?
如果我們只是關閉套接字上的io流,但不關閉套接字,我們能重新打開套接字上的io流嗎?
在此先感謝!
我只是想知道當我們調用關閉與socket相關的inputStream和outStream時,java會做什麼。與socket上的close調用有什麼不同,例如Socket.close()。直接關閉Input/OutputStream和關閉Socket有什麼區別?
如果我們只是關閉套接字上的io流,但不關閉套接字,我們能重新打開套接字上的io流嗎?
在此先感謝!
您應該關閉您從套接字創建的最外面的輸出流。這將沖洗它。關閉套接字或輸入流不會這樣做,因此它是不夠的。關閉了輸出流後,您無需執行其他任何操作。
關閉輸出流==關閉套接字。 flush + fin可能無法完成,因爲在shutdownOutput – irreputable 2010-08-07 22:43:14
這完全不正確。如果需要,關閉輸出流將刷新* stream *(請參閱FilterOutputStream.close()),然後關閉它和套接字。關閉socket *或*調用shutdownOutput *不會刷新套接字(即它的發送緩衝區),它只是在當前套接字發送緩衝區的末尾排隊一個FIN。除非它設置了一個積極的「逗留」超時,否則之後會發生什麼情況與關閉過程是異步的。 – EJP 2010-08-08 03:26:56
我在不同的互聯網上,而不是你的?閱讀javadoc。 'shutdownOutput' - 「任何先前寫入的數據將被髮送,然後是TCP的正常連接終止序列」'getOutputStream' - 「關閉返回的OutputStream將關閉相關的套接字''close' - 關於flush和FIN沒有任何說明。 – irreputable 2010-08-08 19:28:26
從Java API文檔Socket:
公共無效的close() 拋出IOException異常 關閉此套接字。 當前在此套接字上的I/O操作中被阻塞的任何線程都將拋出SocketException。
套接字關閉後,它不能用於其他網絡使用(即不能重新連接或反彈)。需要創建一個新的套接字。
關閉此套接字也將關閉套接字的InputStream和OutputStream。
如果此套接字有關聯的通道,那麼通道也會關閉。
關閉Socket的InputStream將導致關閉Socket。關閉Socket的OutputStream也是一樣。
從Java API文檔Socket#getInputStream()
關閉返回的InputStream將關閉關聯套接字。
查看API文檔,這是出於某種原因。
所以您要說InputStream.close調用Socket.close,後者又調用InputStream.close,後者又調用Socket.close,後者又調用InputStream.close .....? – Pacerier 2012-07-15 20:41:32
關閉流時關閉套接字。如果您調用InputStream.close並嘗試從套接字讀取,它將引發異常。 Socket.close關閉套接字的輸入和輸出流,在各個流上調用close並不會調用Socket.close,但仍然會導致關閉的套接字。 – Jes 2012-07-30 11:03:20
當然它調用Socket.close()。 「關閉」標誌避免了無限迴歸。 – EJP 2012-08-28 18:24:42
這更像是一個比一個很好的答案評論:(我寧願註釋添加到一個以上的答案,但我沒有REP)
的問題,因爲我讀它,是「我可以在一個套接字上關閉一個流,然後在同一個套接字上打開一個流?「但是人們似乎在回答這個問題:」我該如何幹淨地關閉套接字?「......這不是被問到的問題。
被問到的問題的答案是「否」。關閉流時,請關閉套接字。
(我明白爲什麼在至少有一種情況下,有人可能會問這個問題,當你通過socket傳輸Java Properties時,接收端必須看到EOF識別屬性的結尾 - 要看EOF,發件人必須關閉流/套接字,但是,如果你有一個通過該套接字運行的命令/響應協議,你不想關閉它,否則你會失去你想發送響應的頻道上。請參閱Java streaming Properties over Socket處理此問題的一種方法)
請參閱http://stackoverflow.com/questions/484925/does-closing-the-bufferedreader-printwriter-close-the-socket-connection – Istao 2010-08-06 22:54:28