【问题标题】:Error when writing to serializable file写入可序列化文件时出错
【发布时间】:2018-01-15 00:48:48
【问题描述】:

我正在编写一个简单的 Java gmail 客户端来完成我的 A 级项目。 当以下代码部分运行时,我总是会收到错误消息。 我不知道为什么会出现错误。

public static void save(List<user> u3){
    try {

        FileOutputStream fos=new FileOutputStream("users.ser");
        ObjectOutputStream oos= new ObjectOutputStream(fos);
        oos.writeObject(u3);

    }catch (Exception e) {
        e.printStackTrace(); //Added due to suggestion of commentor
    }   
}

错误是:

java.io.NotSerializableException: 用户 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) 在 java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 在 java.util.ArrayList.writeObject(ArrayList.java:762) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988) 在 java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 在 java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 在 main.saveu(main.java:65) 在 main.main(main.java:42) 在 __SHELL12.run(__SHELL12.java:6) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 bluej.runtime.ExecServer$3.run(ExecServer.java:730)

【问题讨论】:

  • 用户类是否实现了Serializable?
  • 主类还是用户类?他们都没有实现可序列化
  • 你应该阅读如何在 Java 中serialize objects
  • 非常感谢 Tezra,我对可序列化类不太熟悉,我有点忽略了一些东西,感谢链接,感谢其他所有人

标签: java serializable


【解决方案1】:

您的“用户”类没有实现可序列化。 Serializable 主要是一个标记接口。你不需要做任何事情来实现它。只需声明您的类实现它就足够了。

class User implements Serializable{
    // your existing code here
}

【讨论】:

    【解决方案2】:

    如官方documentation of JEE7所说:

    当实例需要具有可序列化接口时抛出

    所以你只需要实现Serializable 接口。

    class User implements Serializable {
    //Staff
    }
    

    【讨论】:

      猜你喜欢
      • 2015-08-11
      • 2018-04-18
      • 2016-02-07
      • 1970-01-01
      • 2016-08-26
      • 1970-01-01
      • 2018-02-10
      相关资源
      最近更新 更多