序列化和反序列化

序列化的意义

类上增加一个Serializable,就可以解决java对象的网络传输问题。

java 平台允许我们在内存中创建可复用的java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即 这些对象的生命周期不会比JVM的生命周期更长,但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取 被保存的对象。java对象序列化就能够帮助我们实现该功能。

简单来说
序列化是把对象的状态信息转化为可存储或传输的形式过程,也就是把对象转化为字节序列的过程称为对象的序列化。
反序列化是序列化的逆向过程,把字节数组反序列化为对象,把字节序列恢复为对象的过程称为对象的反序列化。

序列化的高阶

简单认识一下java原生序列化

通过JDK提供了java对象的序列化方式实现对象序列化传输,主要通过输出流 java.io.ObjectOutputStream 和对象输入流 java.io.ObjectInputStream 来实现。

java.io.ObjectOutputStream:
表示对象输出流,它的writeObject(Object object)方法可以对参数指定的object对象进行序列化,把得到的字节序列写到一个目标输出流中。
java.ioObjectInputStream:
表示对象输入流,它的readObject()方法源输入流中读取字节序列,再把它们反序列化成为一个对象,并将其返回。

需要注意:被序列化的对象需要实现java.io.Serializable接口

serialVersionUID 的作用

字面意思上是序列化的版本号,凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量。

结论
java的序列化机制是通过判断类的 serialVersionUID 来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的 serialVersionUID 与本地相应实体类的 serialVersionUID 进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即InvalidCastException。

Transient 关键字

Transient 关键字的作用是控制变量的序列化,在变量声明前加上该关键字,可以阻止该变量被序列化到文件中,在被序列化后,transient 变量的值被设为初始值,如 int 型的是 0,对象型是null。

java 序列化的简单总结

  1. java 序列化只是针对对象的状态进行保存,至于对象中的方法,序列化不关心
  2. 当一个父类实现了序列化,哪么子类会自动实现序列化,不需要显示实现序列化接口
  3. 当一个对象的实例变量引用了其它对象,序列化这个对象的时候会自动把引用的对象也进行序列化(实现深度克隆)
  4. 当某个字段被申明为transient后,默认的序列化机制会忽略这个字段
  5. 被申明为transient 的字段,如果需要序列化,可以添加两个私有方法:writeObject 和 readObject

本文摘自
序列化和反序列化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值