首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >序列化Java对象时,控制文件大小的因素是什么

序列化Java对象时,控制文件大小的因素是什么
EN

Stack Overflow用户
提问于 2015-02-24 02:55:28
回答 1查看 488关注 0票数 0

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

代码语言:javascript
运行
复制
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“:

代码语言:javascript
运行
复制
FileOutputStream fos = new FileOutputStream("C:\\CoreCod\\serial.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(new DescendentSer());
oos.flush();
oos.close();

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

代码语言:javascript
运行
复制
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“将使用更多数据和元数据进行序列化。

EN

回答 1

Stack Overflow用户

发布于 2015-02-24 03:01:03

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28681231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档