写入可序列化文件时出错
Error when writing to serializable file
我正在编写一个简单的 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)
at 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)
at main.saveu(main.java:65)
at 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)
at java.lang.reflect.Method.invoke(Method.java:497)
at bluej.runtime.ExecServer.run(ExecServer.java:730)
您的 class "User" 没有实现 Serializable。
Serializable 主要是一个标记接口。您无需执行任何操作即可实现它。只需声明您的 class 实现它就足够了。
class User implements Serializable{
// your existing code here
}
如官方所述documentation of JEE7:
当实例需要有Serializable接口时抛出
所以你只需要实现 Serializable
接口。
class User implements Serializable {
//Staff
}
我正在编写一个简单的 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) at 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) at main.saveu(main.java:65) at 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) at java.lang.reflect.Method.invoke(Method.java:497) at bluej.runtime.ExecServer.run(ExecServer.java:730)
您的 class "User" 没有实现 Serializable。 Serializable 主要是一个标记接口。您无需执行任何操作即可实现它。只需声明您的 class 实现它就足够了。
class User implements Serializable{
// your existing code here
}
如官方所述documentation of JEE7:
当实例需要有Serializable接口时抛出
所以你只需要实现 Serializable
接口。
class User implements Serializable {
//Staff
}