Android:ObjectInputStream.readObject()上的OptionalDataException
情况:从我的Android服务器向客户端发送一个简单的字符串对象。我在服务器上使用ObjectOutputStream,在客户端使用ObjectInputStream 服务器代码: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
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()
应该或者甚至可以为您处理这件事。