2011-06-01 182 views
1

我正在寫服務器,我正在使用ObjectInputStream來處理專有數據包。我最近有時會收到一些意想不到的ClassCastException,我想打電話objectInputStream.readObject(),然後嘗試將它們轉換爲專有數據包。我一直在試圖追查這個問題,我一直在想是否因爲objectInputStream因某種問題而崩潰。根據objectInputStream.readObject()方法的文檔...「所有異常對於InputStream都是致命的,並使其處於不確定狀態;調用方可以忽略或恢復流狀態。」恢復崩潰的InputStream

我想知道他們是什麼意思的「恢復流狀態」...有沒有適當的方式來恢復objectInputStream或我應該做一個socket.getInputStream()

回答

1

如果我理解正確,您的異常並不是由objectInputStream.readObject()引起的,而是通過將(成功返回的)對象轉換爲您正在嘗試讀取的對象,因此異常不應影響流。

+0

嗯,我懷疑ObjectInputStream壞了,因爲我得到一個ClassCastException後,我的ObjectInputStream停止從客戶端接收數據包。 – Brian 2011-06-01 02:19:44

+0

'readObject'是拋出異常還是拋出異常? – trutheality 2011-06-01 02:31:07

+0

嗯,我明白你的意思了,這就是我最初懷疑的......當我知道我正在發送它們時,我爲什麼會得到ClassCastExceptions;順便說一句,演員們90%的時間都在工作,有時它會崩潰。我嘗試了一個小實驗...嘗試在崩潰後重新加載ObjectInputStream,所以我調用'objectInputStream = new ObjectInputStream(socket.getInputStream);'並引發'StreamCorruptedException'。 – Brian 2011-06-01 02:36:07