Android:ObjectInputStream.readObject()上的OptionalDataException

Android:ObjectInputStream.readObject()上的OptionalDataException,android,objectinputstream,objectoutputstream,optionaldataexception,Android,Objectinputstream,Objectoutputstream,Optionaldataexception,情况:从我的Android服务器向客户端发送一个简单的字符串对象。我在服务器上使用ObjectOutputStream,在客户端使用ObjectInputStream 服务器代码: mOutput.flush(); mOutput.reset(); Object myStr = new String(res); //res is some String mOutput.writeObject(myS

情况:从我的Android服务器向客户端发送一个简单的字符串对象。我在服务器上使用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()
WriteBolean()、writeUTF()
writeChars()
或任何内容……否则将引发此异常


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

编辑了我的代码。我尝试发送一个字符串对象,一个纯对象,里面有一个字符串,但是发生了同样的错误。你不必删除它们。你只需要确保你真的读过它们。否则,写它们的初衷到底是什么?完全没有理由认为
flush()
reset()
应该或者甚至可以为您处理这件事。