Java序列化简析

Java序列化可以将对象转换为二进制序列,以方便对象持久化网络传输

基本用法

要实现序列化的对象必须实现java.io.Serializable这个接口,并借助IDE生成serialVersionUID变量。Java的序列化机制通过判断类的serialVersionUID来验证版本一致。我们可以通过ObjectOutputStream和ObjectInputStream来对对象进行读取和写入。

在序列化过程中,如果对象引用了其他对象,那么显然不可能去将其内存地址进行序列化。每个对象都有一个独一无二的序列号,是该对象的唯一标识:

  • 对于每个对象,当第一次遇到时,保存其数据到流中。
  • 如果该对象已经被保存过了,则只存储其序列号。

缺点

Java序列化存在三个致命缺点,导致其不适用于网络传输:

  • 无法跨语言:在网络传输中,经常会有异构语言的进程的交互,但Java序列化技术是Java语言内部的私有协议,其他语言无法进行反序列化。目前所有流行的RPC框架都没有使用Java序列化作为编解码框架。
  • 序列化后的码流太大
  • 序列化的性能较低

每日学习笔记,写于2020-05-21 星期四

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。