Java对象序列化时,哪些因素会影响文件大小

时间:2015-02-23 18:55:28

标签: java serialization fileoutputstream serializable objectoutputstream

我正在尝试两种不同类型的实例的非常基本的Java序列化。这是第一个Java类型的类结构:

class Ancestor {
    int ai = 1;
    String as = "abc"; 
}

class DescendentSer extends Ancestor implements java.io.Serializable{
    int diser = 2;
    String dsser = "xyz";

    @Override
    public String toString (){
        return diser + " " + dsser + " " +ai+" "+as ;
    }
}

我尝试通过以下代码片段序列化“DescendentSer”:

FileOutputStream fos = new FileOutputStream("C:\\CoreCod\\serial.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(new DescendentSer());
oos.flush();
oos.close();

序列化完成后,“serial.dat”文件的大小恰好为117个字节。然后我尝试序列化另一个类结构如下的实例:

class IndDescendentSer implements java.io.Serializable{
    int diser = 2;
    String dsser = "xyz";

    @Override
    public String toString (){
        return diser + " " + dsser ;
    }
}

序列化“IndDescendentSer”的序列化代码与上面完全相同(除了对象实例将序列化到的文件的名称以及要序列化的实例从以前改变了)。但是,这次序列化文件的大小恰好是120个字节。

这次序列化文件中包含的字节多么可能超过旧版本,特别是当“IndDescendentSer”实例是Object类的直接后代时,而“DescendentSer”具有超级类型 - “祖先” “上课。因此,预计“DescendentSer”将被序列化更多的数据和元数据。

1 个答案:

答案 0 :(得分:1)

我认为这就是名字。字符存储在一个字节中,最后一个类的名称多3个字母,多3个字节。请注意,这可能是巧合,因为我不太熟悉序列化。

序列化是关于storings一个实例,它只与该类的变量有关,因为它们决定了类的状态。加载变量时,实例是相同的,因为它与当前变量的作用相同,这就是我们想要的。