我正在尝试两个不同类型的实例的非常基本的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“将使用更多数据和元数据进行序列化。
发布于 2015-02-24 03:01:03
我想它在名字里。一个字符存储在一个字节中,最后一个类的名称多了3个字母,多了3个字节。请注意,这可能是巧合,因为我不太熟悉序列化。
序列化是关于存储一个实例,它只与该类的变量有关,因为这些变量决定了类的状态。当加载变量时,实例是相同的,因为它与当前变量的行为相同,这正是我们想要的。
https://stackoverflow.com/questions/28681231
复制相似问题