目录
频道首页
04.序列化前言
收藏
0
sgy123 最近修改于 2023-11-07 14:46:32

序列化与反序列化前言

1.目的

  1. 网络传输
  2. 数据持久化

2.本质

序列化本质上是一种数据编码工作,包含基本类型数据和复杂对象。复杂对象也是由基本类型构成的,所以序列化归根结底是要解决基本类型的数据编码,如整数编码、字符串编码、二进制流编码等

3.最典型的使用场景

我们在开发一些远程过程调用(RPC)的程序时,通常会涉及对象的序列化与反序列化的问题,例如一个“Person”对象从客户端通过 TCP 方式发送到服务器端。由于 TCP 协议(或者 UDP 等类似底层协议)只能发送字节流,数据接收端再将字节流“反序列化”化成Java POJO对象即可

4.分类与常见方案

文本与二进制分类

IDL与非IDL分类

  • 序列化/反序列化分为 IDL(Interface Description Language,接口描述语言)和非IDL两类
  • 非 IDL 技术方案包含 JSON、XML等,提供构造和解析的工具包即可使用,不需要做代码生成的工作
  • IDL 技术方案包含Thrift、Protocol Buffer、Avro等,有比较完整的规约和框架实现

5.选型要点

6.IDL序列化核心角色与功能

  1. IDL描述文件:比如,Thrift是以thrift为后缀的文件,Protocol Buffer是以proto为后缀的文件
  2. IDL文件编译器:根据IDL文件生成具有序列化/反序列化功能的代码文件。例如,Thrift通过thrift命令行指定编程语言类型来生成代码文件,Protocol Buffer根据protoc命令行生成代码文件
  3. Stub/Skeleton代码:在客户(Client)端,一般称为Stub代码。在服务器(Server)端,一般称为Skeleton代码

内容大纲
批注笔记
04.序列化前言
ArticleBot
z
z
z
z
主页
会议室
文章
看板
讨论
AI文档