-1

情况:从我的 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。为什么还会出现这个错误?

4

1 回答 1

-1

问题解决了。ObjectOutputStreamAndroid 的文档说在发送对象时不应该有剩余的原语。

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

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

想知道为什么事先和立即flush()reset()没有工作?

于 2014-01-28T09:58:03.283 回答