提问者:小点点

类不会序列化 java [复制]


抱歉,如果已经问过这个问题,但我在序列化我制作的类时遇到了一些问题。我已经测试了字符串和数组列表,但是当我尝试记事卡(由两个字符串组成的类)时,在序列化和明显反序列化时出现错误。这些是我在运行程序时遇到的错误。

java.io.NotSerializableException: com.leopoldmarx.note.notecard.NoteCard
    at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    at java.io.ObjectOutputStream.writeObject(Unknown Source)
    at com.leopoldmarx.note.program.Driver.main(Driver.java:22)
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: com.leopoldmarx.note.notecard.NoteCard
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at com.leopoldmarx.note.program.Driver.main(Driver.java:33)
Caused by: java.io.NotSerializableException: com.leopoldmarx.note.notecard.NoteCard
    at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    at java.io.ObjectOutputStream.writeObject(Unknown Source)
    at com.leopoldmarx.note.program.Driver.main(Driver.java:22)

错误代码如下:

NoteCard test = new NoteCard("this is the front", "this is the back");
System.out.println(test.getFront() + test.getBack());
try {

    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("hey.cardset"));
    oos.writeObject(test);
    oos.close();
}

catch(Exception e) {
    e.printStackTrace();
}

try {

    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("hey.cardset"));
    NoteCard n1 = (NoteCard) ois.readObject();
    System.out.println(n1.getFront() + n1.getBack());
}

catch(Exception e) {
    e.printStackTrace();
}

我在网上找遍了,也翻了几本书,一无所获。谢谢你的帮助!


共1个答案

匿名用户

确保NoteCard实现java.io.可序列化接口

public class NoteCard implements java.io.Serializable

此外,如果NoteCard包含其他类成员,则确保它们也实现了java.io.Seriezable

当您想要序列化一个类时,请始终计算一个<code>serialVersionUID</code>,大多数IDE都会为您完成。如果您不提供一个,那么当您序列化时,java将为您提供它,但不建议这样做。

private static final long serialVersionUID = -3457676767677L;