【问题标题】:NotSerializableException in AndroidAndroid 中的 NotSerializableException
【发布时间】:2013-10-18 13:34:21
【问题描述】:

我从java docs 验证了布尔值和字节是可序列化的。根据android docs,我的类实现了可序列化接口。我不确定为什么我不断收到异常。我在这里想念什么? 类是这样的:

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();
    }

我在对象被序列化和反序列化的行处遇到异常。

【问题讨论】:

  • msgStruct 是内部类吗? Java 不支持非静态内部类的序列化。如果 msgStruct 是内部类,请尝试将访问修饰符更改为 static。

标签: android notserializableexception


【解决方案1】:

msgStruct 是偶然的内部类吗?如果是这样,请尝试将其设为静态,或将其移动到自己的 java 文件中。

【讨论】:

  • bgse 和@rhoadster91 - 谢谢。 msgStruct 确实是一个内部类,我将它移到了它自己的 java 文件中。我不再得到 NotSerializableException。但是,我现在得到 - StreamCorruptedException。根据这个线程 - stackoverflow.com/questions/15733449/…,我在创建套接字时只初始化一次输出和输入流。客户端发送 4 条消息,并在第 4 条消息中抛出 StreamCorruptedException。另一方面,服务器只接收第三个消息。这是时间问题吗?
猜你喜欢
  • 2015-06-01
  • 2014-01-31
  • 2018-08-27
  • 2018-08-23
  • 2022-11-15
  • 2013-05-14
  • 2023-04-03
  • 2014-07-23
  • 2015-07-03
相关资源
最近更新 更多