序列化:要设计一套协议,按照某种规则,把内存中数据保存到文件中。文件是一个字节序列,所以必须把数据转换成字节序列,输出到文件。这就是序列化。反之从文件的字节序列恢复到内存,就是反序列化。

 

定义

  1.           serialization    序列化
  2.           将内存中对象存储下来,把它变成一个个字节。->二进制
  3.           deserialization    反序列化
  4.           将文件的一个个字节恢复成内存中对象。->二进制
  5.           序列化保存到文件就是持久化
  6.           可以将数据序列化后持久化。或者网络传输;也可以将从文件中或者网络接收到的字节序列反序列化。
  7.           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的数据类型

  1.                            值
  2.                            双引号引起来的字符串,数值,true和false,null,对象,数组,这些都是值
  3.                            字符串:由双引号包围起来的任意字符的组合,可以有转义字符。
  4.                            数值:有正负,有整数,浮点数。
  5.                            对象:无序的键值对的集合。格式:{key1:value1,...,keyn:valulen}key必须是一个字符串,需要双引号包围这个字符串。valye可以是任意合法值。
  6.                            数组:有序的值的集合。格式:[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解码,从文件读取数据