java - 序列化包含对象 ArrayList 的对象

标签 java list object serialization arraylist

public class User  implements  Serializable{

    public String name;
    public String surname;
    public List<Picked> pickedBooks = new ArrayList<>();

    // Code omitted.
}

然后选择类:

public class Picked {

    public Book book;
    public int period;
    public int cost;

    // Code omitted.
}

和类书:

public class Book {

    public String name;
    public String bookTitle;
    public int howMany;

    // Code omitted.
}

所以主要是我创建了新用户并将其序列化:

User user = new User();
user.setName("John");
user.setSurname("James");
String fileName = "data.bin";
try (ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(fileName))) {
    os.writeObject(user);
} catch (IOException ex) {
    Logger.getLogger(Library.class.getName()).log(Level.SEVERE, null, ex);
}

一切正常,但如果我这样做:

Book book = new Book("Dan Brown", "Angels and Demons", 1);
Picked pck = new Picked(book, 20, 2);
user.add(pck);

然后我想序列化对象用户,程序崩溃了。 我得到的输出是:

java.io.NotSerializableException: at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) at java.util.ArrayList.writeObject(ArrayList.java:742) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)

最佳答案

PickedBook 也需要实现Serializable

关于java - 序列化包含对象 ArrayList 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23794576/

相关文章:

Java Integer.ParseInt 错误

java - 如何将属性类型更改为字符串(WEKA - CSV 到 ARFF)

java - 并发/非阻塞控制台键盘输入

java - 如何将列表从java传递到oracle表并一次获取所有值

android - 创建 float 弹出列表

javascript - 检查对象中是否只有一个数组有值

javascript - 如何按嵌套值对 JSON 对象进行排序?

r - 在R中的列表列表中获取2个变量的平均值

python - 访问具有可变长度的元组列表的元素并以相同的格式保存输出

java - 在 Java 中实现的 Ruby 的 flatten() 方法的算法