Android:ObjectInputStream.readObject()上的OptionalDataException

问题描述 投票:-1回答:1

Situation:从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 objectinputstream objectoutputstream optionaldataexception
1个回答
-1
投票

问题已解决。 Android的文档说,发送对象时ObjectOutputStream中不应有任何剩余原语。

事实证明,在发送对象之后,我也在写一个字节(使用writeBytes())。 flush()reset()并未删除ObjectOutputStream中的该杂散字节,因此ObjectInputStream报告了OptionalDataException

在阅读ObjectOutputStream.writeInt()之前,请确保还除去任何杂散writeBoolean(), writeUTF()writeChars()ObjectInputStream或其他杂物,否则将引发此异常!

想知道为什么先前的和立即的flush()reset()不起作用?

© www.soinside.com 2019 - 2024. All rights reserved.