序列化:要设计一套协议,按照某种规则,把内存中数据保存到文件中。文件是一个字节序列,所以必须把数据转换成字节序列,输出到文件。这就是序列化。反之从文件的字节序列恢复到内存,就是反序列化。
定义:
- serialization 序列化
- 将内存中对象存储下来,把它变成一个个字节。->二进制
- deserialization 反序列化
- 将文件的一个个字节恢复成内存中对象。->二进制
- 序列化保存到文件就是持久化
- 可以将数据序列化后持久化。或者网络传输;也可以将从文件中或者网络接收到的字节序列反序列化。
- Python 提供了pickle库
pickle库:
Python中的序列化,反序列化模块:
- dumps 对象序列化为bytes对象
- dump 对象序列化到文件对象,就是存入文件
- loads 从butes对象反序列化
- load 对象反序列化,从文件读取数据
序列化应用:
一般来说,本地序列化的情况,应用较少,大多数场景都应用在网络传输中。
将数据序列化后通过网络传输到远程结点,远程服务器上的服务将接受到的数据反序列化后,就可以使用了。
但是,要注意一点,远程接收端,反序列化时必须有对应的数据类型,否知就会报错,尤其是自定义类。必须远程得有一致的定义。
现在, 大多数项目,都不是单机的,也不是单服务的。需要通过网络数据传送到其他节点上去,这就需要大量的序列化,反序列化过程。
但是,问题是,Python程序之间还可以都是用pickle解决序列化,反序列化,如果是跨平台,跨语言,跨协议pickle就不太适合了,就需要公共的协议。例如XML,Json,Protocol Buffer等。
不同的协议,效率不同,使用不同场景,要根据不同的情况分析选型。
Josn:
JOSN(JavaScript Object Notation,JS 对象标记)是一种轻量级的数据交换格式。它基于ECMAScript(w3c组织制定的JS规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
Json的数据类型:
- 值
- 双引号引起来的字符串,数值,true和false,null,对象,数组,这些都是值
- 字符串:由双引号包围起来的任意字符的组合,可以有转义字符。
- 数值:有正负,有整数,浮点数。
- 对象:无序的键值对的集合。格式:{key1:value1,...,keyn:valulen}key必须是一个字符串,需要双引号包围这个字符串。valye可以是任意合法值。
- 数组:有序的值的集合。格式:[val1,...,valn]
json模块:
Python于json,Python支持少量内建数据类型到Json类型的转换。
Python类型 | Json类型 |
True | true |
False | false |
None | null |
str | string |
int | integer |
float | float |
list | array |
dict | odject |
常用方法:
Python类型 | Json类型 |
dumps | json编码 |
dump | json编码并存入文件 |
loads | json解码 |
load | json解码,从文件读取数据 |