【问题标题】:Serialization problems: objects that depend on each other and ArrayLists序列化问题:相互依赖的对象和ArrayLists
【发布时间】: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,不可序列化)。

是否有任何原因或我应该考虑的任何重大缺陷?

我很抱歉没有包括我使用的两种主要方法,也没有包括堆栈跟踪或主项目,但我不想让这个问题变得太长。

【问题讨论】:

标签: java serialization arraylist


【解决方案1】:

我的类有属性哪个类型是另一个不同的类有属性哪个类型是第一类(解释得很差,但可以在代码中看到)

难以理解。 Java 和序列化都处理循环依赖,如果这就是你所说的。

以及我使用 ArrayLists 的事实(我读过的无法序列化)

错了。

简单地说“User”,相当于person,是不可序列化的

所以User 没有实现Serializable.

是否有任何原因或我应该考虑的任何重大缺陷?

使User 实现Serializable.Same 用于给您相同消息的任何其他类。

您需要阅读Object Serialization Specification 和相关的Javadoc,并停止依赖任意互联网垃圾。

【讨论】:

  • 其实是User的属性之一没有实现Serializable。我已经阅读了 Serializable 接口文档,但是作为我读到的关于序列化的第一本书,我并没有从中得到太多。我应该稍后再读一遍。
猜你喜欢
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
相关资源
最近更新 更多