频道首页
目录
04.序列化前言
收藏
0
序列化与反序列化前言
1.目的
- 网络传输
- 数据持久化
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序列化核心角色与功能
- IDL描述文件:比如,Thrift是以thrift为后缀的文件,Protocol Buffer是以proto为后缀的文件
- IDL文件编译器:根据IDL文件生成具有序列化/反序列化功能的代码文件。例如,Thrift通过thrift命令行指定编程语言类型来生成代码文件,Protocol Buffer根据protoc命令行生成代码文件
- Stub/Skeleton代码:在客户(Client)端,一般称为Stub代码。在服务器(Server)端,一般称为Skeleton代码
主页
会议室
文章
看板
讨论
AI文档