【发布时间】:2015-03-24 09:19:13
【问题描述】:
我必须序列化一个项目,这是我第一次使用序列化。在得知它之后,我想到了两个可能的问题:我的类有属性哪个类型是另一个不同的类具有属性哪个类型是第一类(解释得很差,但可以在代码中看到)以及我使用 ArrayLists 的事实(我读过的不能序列化)。所以我决定尝试一个非常简化的项目版本:
一个组,它包含一个 Person 的 ArrayList:
public class Group implements Serializable {
private static final long serialVersionUID = 1L;
private Person leader;
private List<Person> members;
private int number;
public Group(Person leader, int number) {
this.leader = leader;
this.number = number;
this.members = new ArrayList<Person>();
this.members.add(leader);
}
public void addMember(Person p) {
this.members.add(p);
}
public int getNumber() {
return number;
}
}
一个人,这包含一个组的 ArrayList:
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private List<Group> groups;
private String name;
public Person(String name) {
this.name = name;
this.groups = new ArrayList<Group>();
}
public Group createGroup(int number) {
Group g = new Group(this, number);
this.groups.add(g);
return g;
}
public void joinGroup(Group g) {
this.groups.add(g);
g.addMember(this);
}
}
还有一个 main 方法,它创建一些组和人员并使用 writeObject() 将它们写入文件,以及另一个使用 readObject() 获取对象的 main 方法(它只使用 readObject() 并打印它们) .
由于上述原因,我没想到这会起作用,但它工作得很好,所以我尝试序列化我的主项目(更复杂)但它不起作用(巨大的堆栈跟踪,只是说“用户",相当于 person,不可序列化)。
是否有任何原因或我应该考虑的任何重大缺陷?
我很抱歉没有包括我使用的两种主要方法,也没有包括堆栈跟踪或主项目,但我不想让这个问题变得太长。
【问题讨论】:
-
我不确定你在读什么书;但是当你查看docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html你会发现ArrayList可以被序列化。
标签: java serialization arraylist