-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 を flush() および reset() します。このエラーがまだ発生するのはなぜですか?

4

1 に答える 1

-1

問題が解決しました。ObjectOutputStreamAndroid のドキュメントには、オブジェクトを送信するときにプリミティブが残ってはいけないと書かれています。

writeBytes()オブジェクトを送信した後、( を使用して) 1 バイトも書き込んでいたことがわかりました。flush()およびはのreset()この漂遊バイトを削除しなかったObjectOutputStreamため、 は をObjectInputStream報告しましたOptionalDataException

を読む前に、浮遊物やその他のものObjectOutputStream.writeInt()writeBoolean(), writeUTF()必ず削除してください...そうしないと、この例外がスローされます!writeChars()ObjectInputStream

なぜ事前と即時が機能flush()reset()なかったのだろうか?

于 2014-01-28T09:58:03.283 に答える