NotSerializableException в Android

Из документов по Java я убедился, что boolean и byte сериализуемы. Согласно документам Android, мой класс реализует сериализуемый интерфейс. Я не уверен, почему я продолжаю получать исключение. Что мне здесь не хватает? Класс такой:

public class msgStruct implements Serializable {
    boolean pingPong = false; 
    int msgId = 0;
    byte[] bufferMsg = new byte[100];
}

Это сериализуется перед отправкой через сокет на сервер, например:

sendMsgStruct.pingPong = false;
sendMsgStruct.msgId = msgId;
rand.nextBytes(sendMsgStruct.bufferMsg);
try {
    ObjectOutputStream serializeMobile = new ObjectOutputStream(mobileSocket.getOutputStream());
    serializeMobile.writeObject(sendMsgStruct);
    serializeMobile.close();
} catch (IOException e1) {
    e1.printStackTrace();
    return false;
} 

Сервер десериализуется следующим образом:

try {
     ObjectInputStream deserializeServer = new ObjectInputStream(clientSocket.getInputStream());
     recvMsgStruct = (msgStruct) deserializeServer.readObject();
     deserializeServer.close();
    } catch (ClassNotFoundException e1) {
      e1.printStackTrace();
    }

Я получаю исключение в строках, где объект сериализуется и десериализуется.


person Sarvavyapi    schedule 10.10.2013    source источник
comment
Является ли msgStruct внутренним классом? Java не поддерживает сериализацию нестатических внутренних классов. Если msgStruct является внутренним классом, попробуйте изменить модификатор доступа на статический.   -  person rhoadster91    schedule 10.10.2013


Ответы (1)


Является ли msgStruct внутренним классом случайно? Если это так, то попробуйте сделать его статическим или переместить в собственный java-файл.

person bgse    schedule 10.10.2013
comment
bgse и @rhoadster91 - спасибо. msgStruct действительно был внутренним классом, и я переместил его в собственный java-файл. Я больше не получаю NotSerializableException. Однако теперь я получаю - StreamCorruptedException. В соответствии с этой веткой - stackoverflow. com/questions/15733449/, я инициализирую вывод и inputStreams только один раз при создании сокета. Клиент отправляет 4 сообщения, а в четвертом сообщении выдает исключение StreamCorruptedException. С другой стороны, сервер получает только третье сообщение. Это вопрос времени? - person Sarvavyapi; 10.10.2013