为了准备OCPJP7考试,我最近玩了一些Serialization。因此,我尝试序列化以下类:
class TempClass implements Serializable {
int secCounter;
static int counter;
{
counter++;
}
{
secCounter=counter;
然后当我尝试使用以下内容将对象写入 aFileOutputStream
时:
TempClass temp = new TempClass();
ObjectOutputStream obi = new ObjectOutputStream(new FileOutputStream(file));
obi.writeObject(temp);
obi.writeUnshared(temp);
obi.writeUnshared(temp);
因此,当我用 读回它们时,在这里我得到了 3 个不同的对象ObjectInputStream
,因此创建了 3 个对象。secCounter
然而,作为实例变量,因此可以序列化的最终值是 1 而不是 3。1 是我调用new
关键字的次数,所以我认为构造函数在创建对象时以不同的方式处理obi.writeUnshared(object)
. 有人知道到底发生了什么吗?我知道静态变量没有序列化,但是在上面发布的代码中,我将值从静态变量复制到了实例变量secCounter
。因此,最终再次检查secCounter
成功序列化的值不会让我得到预期的(至少对我而言)结果,而是 1。
提前致谢。