数据序列化和反序列化

发布于: 2020 年 05 月 20 日

序列化:就是指将对象转换为字节序的过程称为对象的序列化。

反序列化:将字节序恢复为对象的过程称为对象的反序列化。

什么时候需要序列化和反序列化

当想要把内存中的对象保存到数据库或者文件中的时候;当需要将内存中的对象通过socket发送到网络上的时候。

为什么需要序列化和反序列化

首先,一切皆数据,所谓序列化和反序列化实际上也不过是通信双方约定好一种数据交换格式,一方按照此格式编码,另外一方则按照格式规定解码以恢复数据。团队做战的时候,你会需要一种定义良好的数据交换格式,这样只要参与者按照该格式进行数据交换,那么能够大大降低程序开发的复杂度,也能降低新手学习的难度。

如果你的系统需要对外提供接口的时候,数据要以定义良好的格式返回给开发者,以便他们可以对数据进行处理。这种情况下,往往就需要采用一些众所周知的数据序列化协议了,这样第三方开发者看到你的数据就能知道该如何解析。

主流的序列化协议

一个定义良好的数据序列化反序列化协议,应该能够容纳各种编程语言所支持的基本类型,例如bool型、整型、浮点型、字符串类型、复合类型(数组)。

不同的序列化协议采用不同的方式来存储序列化后的数据,有些以文本类型存储即你可以不通过其它手段直接查看数据内容(在数据没有加密的前提下能够像阅读文本文件一样查看数据);有些则以二进制形式存储数据,即序列化后的数据是二进制,你很难直接看懂它。

目前使用的比较广泛的序列化/反序列化协议有json、xml和Google的protobuf。其中xml比较笨重,对新手不够友好,你很容易编写出一个格式错误的xml文本。json相对比较轻量级,它脱胎于前端的JavaScript语言的对象,所以前对对它有原生支持。protobuf则是谷歌推出的一个以二进制形式存储数据协议,它序列化和反序列化的性能要优于json和xml,当同时它也有自己的一套语法和规则以及专用的编译器(用来生成不同语言的源码文件)。

除了这些以外,还有很多其他的序列化协议。

发布于: 2020 年 05 月 20 日 阅读数: 4
用户头像

莫珣

关注

还未添加个人签名 2018.05.04 加入

还未添加个人简介

评论

发布
暂无评论
数据序列化和反序列化