Socket編程問題小記

在socket編程中,若是在一個while循環中使用:編程

ObjectInputStream reader = new ObjectInputStream(socket.getInputStream);
reader.readObject();

可能會出現EOFException,
看了網上的不少答案和解釋,以爲都不對,網上都說是由於已經到達文件末尾了,而reader還在讀取數據,因此在報錯
其實,這是不對的,在循環中調用它本沒有錯,在while循環中若是沒有數據可讀了,它會自動阻塞,有數據來的時候就會讀,因此在這種狀況下根本不會出現socket

到達文件末尾了,而reader還在讀設計

的問題,那麼出現這種狀況的緣由是什麼呢?
實際上是代碼業務邏輯的問題,致使reader在讀的時候,socket被關閉,reader被關閉,鏈接被關閉等等,因此徹底是代碼設計的問題,code

另外在使用ObjectOutputStreamObjectInputStream的時候要注意一個問題,這二者建立的順序須要遵循必定的約定,ObjectInputStream的建立須要ObjectOutputStream建立後的一些數據,因此它通常在ObjectOutputStream以前。建立好ObjectOutputStream以後,還會先向流中先寫入4個字節的數據,建立ObjectInputStream的時候會相應的將其讀出來,因此,不能屢次建立ObjectOutputStream,由於這會致使屢次寫入數據,get

相關文章
相關標籤/搜索