【发布时间】:2013-08-03 09:09:50
【问题描述】:
为了准备 OCPJP7 考试,我最近玩了一些序列化。 因此,我尝试序列化以下类:
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 个对象。
然而,secCounter 的最终值是一个实例变量,因此可以被序列化,它是 1 而不是 3。
1 是我调用new 关键字的次数,所以我认为当使用obi.writeUnshared(object) 创建对象时,构造函数会以不同的方式处理。
有人知道到底发生了什么吗?我知道静态变量没有序列化,但是在上面发布的代码中,我将值从静态变量复制到实例变量secCounter。
因此,最终再次检查成功序列化的 secCounter 的值不会让我得到预期的(至少对我而言)结果,而是 1。
提前致谢。
【问题讨论】:
标签: java serialization io