序列化知识点小结

序列化和反序列化的概念:
当然序列化后的最终目的是为了反序列化,恢复成原先的Java对象,,所以序列化后的字节序列都是可以恢复成Java对象的,这个过程就是反序列化。 
序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。

使用场景:
序列化后的对象可以被写到数据库或文件中,也可用于网络传输。

对象持久化:将对象的状态持久化,比如存储到数据库中。
对象远程传输:将对象从一台计算机发送到另外一台计算机。

对象的序列化主要有两种用途:
   1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
   2)在网络上传送对象的字节序列。

serialVersionUID:序列化的版本号,凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量
显式地定义serialVersionUID有两种添加方法即对应两种用途:
    1、当希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有相同的 serialVersionUID;
    2、当不希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有不同的serialVersionUID。
-根据类名,接口名,方法和属性等生成

思考:一个子类实现了Serializable接口,它的父类没有实现Serializable 接口序列化该对子类对象,然后反序列化输出父类某域的数值,该变量与序 列化时的数值不同
解决:要想父类对象也序列化,就需要让父类也实现Serializable接口。如果 父类不实现的话就需要有默认的无参构造函数,在父类没有实现 Serializable接口时,虚拟机是不会序列化父对象的,而一个Java对象的 实例化过程必先伴随着父类对象的实例化,实例化也不例外。只能调用父类 对象的无参构造函数作为父类实例化。

Transient 关键字:
Transient 关键字作用是控制变量的序列化,在变量声明前加上该关键字,可以阻止该变量被序列化到文件中,在被反序列化后,transient 变量的值被设为初始值,如 int 型的是 0,对象型的是 null。
为什么要不被序列化呢,主要是为了节省存储空间,其它的感觉没啥好处,可能还有坏处(比如有些字段可能需要重新计算,初始化什么的),总的来说,利大于弊。
Transient 关键字可以使得字段不被序列化,还可以根据父类对象序列化的规则,将不需要被序列化的字段抽取出来放到父类中,子类实现 Serializable 接口,父类不实现,根据父类序列化规则,父类的字段数据将不被序列化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值