gpt4 book ai didi

java - 使用 writeUnshared() 序列化期间创建的对象数量

转载 作者:行者123 更新时间:2023-12-02 06:51:00 27 4
gpt4 key购买 nike

为了准备 OCPJP7 考试,我最近玩了一点 Serialization。因此,我尝试序列化以下类:

class TempClass  implements Serializable {  
int secCounter;
static int counter;
{
counter++;
}
{
secCounter=counter;

然后当我尝试使用以下内容将对象写入 FileOutputStream 时:

TempClass temp = new TempClass();  
ObjectOutputStream obi = new ObjectOutputStream(new FileOutputStream(file));
obi.writeObject(temp);
obi.writeUnshared(temp);
obi.writeUnshared(temp);

因此,当我使用 ObjectInputStream 读回 3 个不同的对象时,我得到了 3 个不同的对象,因此已经创建了 3 个对象。然而,secCounter(它是一个实例变量,因此可以序列化)的最终值是 1 而不是 3。1 是我调用 new 关键字的次数,因此我认为当使用 obi.writeUnshared(object) 创建对象时,构造函数会以不同的方式处理。有人知道到底发生了什么吗?我知道静态变量没有序列化,但是在上面发布的代码中,我将值从静态变量复制到实例变量 secCounter 。因此,最终再次检查序列化成功的 secCounter 的值不会得到预期的(至少对我而言)结果,而是 1。

提前致谢。

最佳答案

Nimbers of objects created during serialization ...

出于本问题的目的,在序列化期间创建了对象。

therefore 3 objects have been created.

writeUnshared() 不会创建任何对象。对象是在反序列化时创建的。

However the final value of secCounter, which is an instance variable so can be serialized, is 1 instead of 3.

证明了这一点。序列化时不会创建任何对象。

1 is the number of time I called the new keyword, So I supposed the constructor gets handled in a different way when an object is created with obi.writeUnshared()

同样,此方法不会创建任何对象。没有调用构造函数。 writeUnshared() 中不会发生的是将“句柄”序列化为现有的序列化对象。现在的对象已被序列化,而不是一个将被反序列化为对先前反序列化实例的引用的句柄。

关于java - 使用 writeUnshared() 序列化期间创建的对象数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18031204/

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