Android:ObjectInputStream.readObject()上的OptionalDataException

时间:2014-01-28 08:52:39

标签: android objectinputstream objectoutputstream optionaldataexception

情境:从我的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。为什么这个错误仍然存​​在?

1 个答案:

答案 0 :(得分:0)

问题解决了。 Android的文档说发送对象时,ObjectOutputStream中应该没有剩余的 Primitives

事实证明我在发送Object之后也在写一个字节(使用writeBytes())。 flush()和reset()没有删除Object * Out putStream中的这个迷路字节,因此报告了 In * putStream一个OptionalDataException。

确保在读取ObjectInputStream之前还删除任何杂散的ObjectOutputStream.writeint(),writeBoolean(),WriteUTF()或writeChars()等等......否则将抛出此异常!

不知道为什么先前和立即刷新()和重置()不起作用?!!