写入可序列化文件时出错

时间:2017-08-07 16:23:30

标签: java serializable

我正在编写一个简单的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:user       at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)       at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)       at java.util.ArrayList.writeObject(ArrayList.java:762)       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)       在java.lang.reflect.Method.invoke(Method.java:497)       at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)       at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496)       at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)       at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)       at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)       在main.saveu(main.java:65)       在main.main(main.java:42)       at __SHELL12.run(__ SHELL12.java:6)       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)       在java.lang.reflect.Method.invoke(Method.java:497)       at bluej.runtime.ExecServer $ 3.run(ExecServer.java:730)

2 个答案:

答案 0 :(得分:2)

你的班级&#34;用户&#34;没有实现Serializable。 Serializable主要是标记接口。您无需执行任何操作即可实现它。简单地声明你的类实现它就足够了。

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

答案 1 :(得分:0)

如官方documentation of JEE7中所述:

当实例需要具有Seri​​alizable接口

时抛出

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

class User implements Serializable {
//Staff
}