gpt4 book ai didi

java - java序列化如何解决循环引用问题?

转载 作者:行者123 更新时间:2023-11-30 02:01:09 25 4
gpt4 key购买 nike

我用Java做了序列化测试。我发现Java序列化可以正确处理循环引用。但是Java序列化是如何解决循环引用问题的呢?

以下代码可以正确运行:

public class SerializableTest {

static class Employee implements Serializable{

private static final long serialVersionUID = 1L;

String name;

int age;

Employee leader;

public void say(){
System.out.println("my name is " + name + ". and I'm " + age + " years old.");
}

}

public static void main(String[] args) throws IOException, ClassNotFoundException {

ObjectOutput objectOutput = new ObjectOutputStream(new FileOutputStream(new File("tempPath")));

Employee employee = new Employee();
employee.name = "Tom";
employee.age = 41;
employee.leader = employee;
employee.say();

objectOutput.writeObject(employee);

ObjectInput objectInput = new ObjectInputStream(new FileInputStream(new File("tempPath")));

Employee readEmployee = (Employee) objectInput.readObject();

readEmployee.say();
readEmployee.leader.say();
}
}

最佳答案

Java 序列化使用 IdentityHashMap 将其尝试序列化的每个引用映射到 ID。第一次序列化对象时,它会写入其内容和 id。之后,它只写入允许循环引用的 id 和对象的一份副本,无论引用多少次。

缺点是,如果您保留对象流并且不调用 reset() ,它将保留您曾经发送过的每个对象,从而导致内存使用量增加。此外,如果您更改对象并再次发送它,更改将不会明显,因为它仅再次发送对该对象的引用。

关于java - java序列化如何解决循环引用问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52792493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com