序列化与反序列化

160 阅读2分钟

基本概念

  • 序列化:Java对象转换为字节序列的过程
  • 反序列化:字节序列恢复为Java对象的过程

主要作用

  • 方便网络传输数据,TCP连接上只能传输二进制字节流(待定)
  • 将pojo对象转变为字节流存储可以减少存储空间
  • 可以通过序列化在进程间传递对象(待定)

pojo :Plain Old Java Object 简单的Java对象

常见序列化框架

JSON文本格式的序列化

json可以作为数据包传输,可以把java对象转化为json格式进行传输,

image.png json是字节流 未完待续

JSON序列化和反序列化开源库

  • FastJson:阿里巴巴旗下,独创快速算法,性能最高(后面发现高危漏洞)
  • Gson:谷歌旗下,功能齐全
  • Jackson:开源社区,优点小巧,缺点不能转换复杂的Java类型

xml格式的序列化

为什么要很多实体类要 implements Serialzable

  • 一个类只有实现了 Serializable 接口,它的对象才是可序列化的。因此如果要序列化某些类的对象,这些类就必须实现 Serializable 接口。而实际上,Serializable 的源码是一个空接口,没有什么具体内容,它的目的只是简单的标识一个类的对象可以被序列化。(还未理解)

image.png 这里理解的是返回响应体实现了Serialzable,那携带对象的返回体就可以自动序列化后再传输

为什么要显示声明 serialVersionUID

serialVersionUID 的作用是验证序列化和反序列化的过程中,对象是否保持一致。所以在一般情况下我们需要显示的声明serialVersionUID。如果接受者加载的该对象的类的 serialVersionUID 和发送者的类版本号不同的话,反序列化会爆出 InvalidClassException 错误。(还未理解)