当前位置: 首页 > 知识库问答 >
问题:

Java,当一个对象被反序列化并包含其他对象时,每个包含的对象都是唯一的实例吗?

秦学林
2023-03-14

我正在处理5个自定义对象,需要能够将它们保存(序列化)到文件中,并在以后重新加载它们。所有对象都实现可序列化,我可以单独保存和重新加载它们。

这个html" target="_blank">程序基本上是在模仿关系数据库,但是我不能使用实际的数据库。

我的潜在问题是,一个或两个对象包含其他对象。从我的测试来看,子对象似乎全部保存在主对象中。

public foo1(Object o){
foo2(o);
//some other stuff
}

...

public foo2(){
//some stuff
}

当一个foo1对象被反序列化时,它会正确地重新创建自己,包括任何foo2对象。

然而,我认为foo2对象只是因为它们是foo1的一部分,而且任何包含foo2副本的foo1的后续实例都将本质上创建更多相同但独立的foo2实例。

我担心当程序加载所有foo1时,可能会在内存中创建同一foo2的数百个副本。

假设是这样,实施这一过程的更好方法是什么?

共有1个答案

何星鹏
2023-03-14

不会。对象图的完整性将得到保留。如果它包含对单个对象的多个引用,则会在反序列化时保留。

 类似资料:
  • 然后是班级选拔: 教材: 因此,我主要创建新用户并将其序列化: 一切都很完美,但如果我这样做: 然后我想序列化对象用户,程序崩溃了。我得到的结果是: JAVA木卫一。NotSerializableException:在java上。木卫一。ObjectOutputStream。java上的WriteObject 0(ObjectOutputStream.java:1183)。木卫一。ObjectOu

  • 问题内容: 我有一个对象(解析树),其中包含子节点,这些子节点是对其他节点的引用。 我想使用序列化此对象,但是我得到了 TypeError:循环对象值 因为我提到的结构。 我该如何解决?对我而言,在序列化对象中是否表示对其他节点的引用并不重要。 另一方面,在创建对象时从对象中删除这些属性似乎很乏味,我也不想对解析器(水仙)进行更改。 问题答案: 使用的第二个参数,该替代品的功能,以排除已序列化对象

  • 问题内容: 顾名思义,我正在尝试将包含一些BufferedImages(包括其他变量,字符串等)的对象保存到文件中。 我发现了这一点: 如何序列化包含BufferedImages的对象 它的工作原理就像一种魅力,但有一点点挫折:如果您的对象仅包含一个图像,它就可以很好地工作。 我一直在努力获取他的解决方案以处理多个图像(理论上应该可以使用),但是每次读入文件时,我都会得到对象,图像数量正确,但只有

  • 我试图通过JS对象(1)来找出另一个对象(2)上是否存在值,并返回对象(2)的find值。 在这种情况下,我只能通过得到真/假来找出它是否存在,我也试过这个 但是在这种情况下,它只返回空数组,而不是对象(1)值找到的对象(2)值

  • 很抱歉标题太长,但我的问题如下; 我有这些课程; 和 和 如果只有断言它拥有的列表,我会使用以下自定义匹配器;

  • 问题内容: 我正在尝试用Java创建一个简单的图像编辑程序。我制作了一个对象,其中包含有关正在编辑的图像的所有信息(一些基本属性,所应用的效果列表,层列表等),我想要一种简单的方法将其保存到磁盘,以便稍后再次打开。 我发现使用Java的defualt 接口可能正是我想要的,我可以将整个对象写到文件中,稍后再读回内存中。但是,包括和不能序列化(其他所有方法都可以)。 我知道可以重写和方法,但我从未这