![](/img/trans.png)
[英]ObjectInputStream.readObject() NotSerializableException
[英]Android: OptionalDataException upon ObjectInputStream.readObject()
情況:從我的 Android 服務器,我向客戶端發送一個簡單的 String OBJECT。 我在服務器上使用 ObjectOutputStream,在客戶端使用 ObjectInputStream。
服務器代碼:
mOutput.flush();
mOutput.reset();
Object myStr = new String(res); //res is some String
mOutput.writeObject(myStr);
mOutput.flush();
客戶代碼:
Log.v("CLIENT","Attempting to receive results from Server");
obj = objectInputStream.readObject(); //ERROR THROWN HERE
Log.v("CLIENT", "Object received");
res = (String)obj;
問題:在客戶端,我在 readObject() 期間收到 OptionalDataException。 有趣的是,它只能在第一次正確讀取它,但隨后拋出此異常。
如您所見,我在發送對象之前和之后刷新()和重置()OutPutStream。 為什么還會出現這個錯誤?
問題解決了。 Android 的文檔說發送對象時ObjectOutputStream
不應該有剩余的原語。
事實證明,我還在發送對象后寫了一個字節(使用writeBytes()
)。 flush()
和reset()
沒有刪除ObjectOutputStream
中的這個雜散字節,因此ObjectInputStream
報告了一個OptionalDataException
。
在讀取ObjectInputStream
之前,請確保您還刪除了任何雜散的ObjectOutputStream.writeInt()
、 writeBoolean(), writeUTF()
或writeChars()
或任何其他內容......否則將拋出此異常!
想知道為什么之前的和立即的flush()
和reset()
不起作用?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.