0

Ситуация: С моего сервера Android я отправляю простой объект String OBJECT клиенту. Я использую ObjectOutputStream на сервере и ObjectInputStream на клиенте.Android: OptionalDataException при ObjectInputStream.readObject()

Серверный код:

  mOutput.flush(); 
      mOutput.reset(); 

      Object myStr = new String(res); //res is some String 
      mOutput.writeObject(myStr); 
      mOutput.flush(); 

Client Код:

  Log.v("CLIENT","Attempting to receive results from Server"); 

      obj = objectInputStream.readObject(); //ERROR THROWN HERE 

      Log.v("CLIENT", "Object received"); 

      res = (String)obj; 

Проблема: На стороне клиента, я получаю OptionalDataException во readObject(). Интересно то, что его способность читать это правильно только в первый раз, но впоследствии выбрасывает это исключение.

Как вы можете видеть, я очищаю() и перезагружаю() OutPutStream до и после отправки объекта. Почему эта ошибка все еще существует?

+0

Отредактирован мой код. Я попытался отправить объект String, чистый объект со строкой внутри него, но та же ошибка возникает. – Abhishek

ответ

0

Проблема решена. Документация Android говорит, что не должно быть остатка Примитивы в ObjectOutputStream при отправке Объекты.

Оказалось, что я также пишу байт (используя writeBytes()) после отправки объекта. Сброс() и сброс() НЕ удаляли этот байт в объекте * OutputStream, и, следовательно, объектВ * putStream сообщил об исключении OptionalDataException.

Убедитесь, что вы также удалить любую бездомную ObjectOutputStream.writeint(), writeBoolean(), WriteUTF() или writeChars() или что-то, прежде чем читать ObjectInputStream ... В противном случае это будет сгенерировано исключение!

Удивительно, почему предыдущий и немедленный сброс() и сброс() не сработали? !!

Смежные вопросы