序列化与反序列化
序列化:把对象转换为字节序列的过程。
反序列化:把字节序列恢复为对象的过程。
举个例子,在JVM中,对象是以一定形式存在于内存中,然后被JVM识别从而可以以“对象”的方式是用它。那么序列化是什么呢,简单来说就是把内存中的对象的状态先以一种方式导出保存下来以便今后在某地方能够继续使用它。
序列化的组件
IDL(Interface description language)文件:参与通讯的各方需要对通讯的内容需要做相关的约定(Specifications)。为了建立一个与语言和平台无关的约定,这个约定需要采用与具体开发语言、平台无关的语言来进行描述。这种语言被称为接口描述语言(IDL),采用 IDL 撰写的协议约定称之为 IDL 文件。
IDL Compiler:IDL 文件中约定的内容为了在各语言和平台可见,需要有一个编译器,将 IDL 文件转换成各语言对应的动态库。
Stub/Skeleton Lib:负责序列化和反序列化的工作代码。Stub 是一段部署在分布式系统客户端的代码,一方面接收应用层的参数,并对其序列化后通过底层协议栈发送到服务端,另一方面接收服务端序列化后的结果数据,反序列化后交给客户端应用层;Skeleton 部署在服务端,其功能与 Stub 相反,从传输层接收序列化参数,反序列化后交给服务端应用层,并将应用层的执行结果序列化后最终传送给客户端 Stub。
Client/Server:指的是应用层程序代码,他们面对的是 IDL 所生成的特定语言的 class 或 struct。
底层协议栈和互联网:序列化之后的数据通过底层的传输层、网络层、链路层以及物理层协议转换成数字信号在互联网中传递。