Java序列化

	序列化,又称为“串化”,可以形象的把它理解为把Java对象内存中的数据采编成一串二进制的数据,然后把这些数据持久化到内存或磁盘。当需要还原这些数据的时候,在通过反序列化的过程,把对象又重新还原到内存中。

java.io.Serializable接口是可以进行序列化的类的标志性接口,该接口本身没有任何需要实现的抽象方法,它仅仅是用来告诉JVM该类的对象可以进行反序列化的,并且它的序列化ID由静态的serialVersionlUID变量提供。

serialVersionlUID变量其实是一个静态的long型的常量,它的作用在序列化和反序列化的过程中,起到了一个辨别类的作用。在反序列化的时候,如果俩个类的类名完全相同,就通过serialVersionlUID老判断该类是否符合要求,如果不行,则抛出异常。

	java的I/O提供了一对类用做对象的序列化和反序列化,主要包括ObjectInputStream和ObjectOutputStream。它们的用法与字节流相似,只不过此时处理的是对象,而不仅仅是字节数据了。

总结:

序列化本质上就是把对象内存中的数据按照一定规则,变成一系列的字节数据,然后在把这些字节数据写入到流中。而反序列化的过程相反,先读取字节数据,然后在重新组装成Java对象。
所有需要进行序列化的类,都必须实现Serializable接口,必要时还需要提供静态的常量serialVersionUID

补充说明:
序列化对象以字节数组保持-静态成员不保存

Transient 关键字阻止该变量被序列化到文件中

  1. 在变量声明前加上 Transient 关键字,可以阻止该变量被序列化到文件中,在被反序列
    化后,transient 变量的值被设为初始值,如 int 型的是 0,对象型的是 null。
  2. 服务器端给客户端发送序列化对象数据,对象中有一些数据是敏感的,比如密码字符串
    等,希望对该密码字段在序列化时,进行加密,而客户端如果拥有解密的密钥,只有在
    客户端进行反序列化时,才可以对密码进行读取,这样可以一定程度保证序列化对象的
    数据安全
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值