在socket編程中,若是在一個while循環中使用:編程
ObjectInputStream reader = new ObjectInputStream(socket.getInputStream); reader.readObject();
可能會出現EOFException,
看了網上的不少答案和解釋,以爲都不對,網上都說是由於已經到達文件末尾了,而reader
還在讀取數據,因此在報錯
其實,這是不對的,在循環中調用它本沒有錯,在while
循環中若是沒有數據可讀了,它會自動阻塞,有數據來的時候就會讀,因此在這種狀況下根本不會出現socket
到達文件末尾了,而reader還在讀設計
的問題,那麼出現這種狀況的緣由是什麼呢?
實際上是代碼業務邏輯的問題,致使reader
在讀的時候,socket被關閉,reader被關閉,鏈接被關閉等等,因此徹底是代碼設計的問題,code
另外在使用ObjectOutputStream
和ObjectInputStream
的時候要注意一個問題,這二者建立的順序須要遵循必定的約定,ObjectInputStream
的建立須要ObjectOutputStream
建立後的一些數據,因此它通常在ObjectOutputStream
以前。建立好ObjectOutputStream
以後,還會先向流中先寫入4個字節的數據,建立ObjectInputStream
的時候會相應的將其讀出來,因此,不能屢次建立ObjectOutputStream
,由於這會致使屢次寫入數據,get