序列化与反序列化

基本概率

为了磁盘or网络传输,序列/反序列化对象的状态(成员变量),反序列化的其实是一个新的对象。

java序列化与反序列化

支持序列化和反序列化的基本类型有:String,Array,Enum和Serializable

  1. 当父类继承Serializable接口,所有子类都可以被序列化
  2. 子类实现了Serializable接口,父类没有,父类中的属性不能序列化(不报错,数据会丢失),但是子类中属性人能正确序列化
  3. 如果序列化的属性是对象,这个对象也必须实现Serializable接口,否则会报错
  4. 在反序列化时,如果对象的属性有修改或删减,修改的部分属性会丢失,但不会报错
  5. 在反序列化时,如果serialVersionUID被修改,那么反序列化时会失败
  6. List或者Map容器中包含的泛型类型也必须实现Serializable接口,否则也会报java.io.NotSerializableException

参考:
https://blog.csdn.net/moudaen/article/details/19122233
https://blog.csdn.net/qq_16628781/article/details/70049623

序列化/反序列化协议

java序列化为二进制码,python的pickle也是序列化模块,为了能够支持不同平台、不同语言(前后端)之间的对象传输,必须有相关的通用协议规范。

相关协议有:protobuf、json、xml、thrift等。现在主流是json、protobuf用的比较多,thrift其实是一个rpc框架,也包括了序列化/反序列化协议。

目前网络传输主流框架:

  • Restful框架:用http协议,get/post/put/delte/head,把任何操作都定义成增删改查。序列化/反序列化协议一般是json。主流对公网站一般都是该框架。
  • RPC框架:只给接口,操作更符合我们日常的编程方法or函数,传输吞吐更快,一般对内网站都用该框架。如dubbo,thrift等。

序列化与反序列化
http://yoursite.com/2020/03/07/编程开发/Java/序列化与反序列化/
作者
Wei Lyu
发布于
2020年3月7日
许可协议