簡體   English   中英

Android:ObjectInputStream.readObject() 上的 OptionalDataException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM