序列化与反序列化
2016-11-07 本文已影响0人
_karen
定义
- 序列化Serialization:将对象转换成二进制流的过程叫做序列化
- 反序列化deSerialization:将二进制流转换成对象的过程叫做反序列化
只有二进制数据才能在网络中传输,客户端调用远程函数和服务端返回的值传输需要序列化反序列化的过程。
python序列化与反序列化
pickle库
pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储,也可以简单的将字符进行序列化。pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象,也可以将字符进行反序列化。和json不同的是:json 更适合跨语言 可以处理字符串,基本数据类型;pickle python专有,更适合处理复杂类型的序列化。
- 功能
pikle模块提供 dumps loads dump load四个基本功能
dumps 和loads 用于python对象和字符串间的序列化和反序列化,dumps 和json.dumps功能一样,但是以字节对象形式返回封装的对象,dumps对象序列化为bytes对象。loads和json.loads功能一样,从字节对象中读取被封装的对象,并返回。loads从bytes对象反序列化
json库
json是一种轻量级的数据交换格式,数据类型。
- 应用场景
json模块主要用于处理json格式的数据,可以将json格式的数据转化为python的字典,便于python处理,也可以将python的字典或列表等对象转化为json格式的数据,便于跨平台或跨语言进行数据交互 - Json模块提供了四个功能:dumps、dump、loads、load
- dumps 和 loads 用于python对象和字符串间的序列化和反序列化
1.1 dumps:将python 基本数据类型转化为json格式数据类型
在序列化时,中文汉字总是被转换为unicode码,在dumps函数中添加参数ensure_ascii=False即可解决。
1.2 loads:将json格式数据类型转化为python数据类型
通过loads进行反序列化时,字符串必须严格符合json格式,有双引号 - dump 和load 用于对文件进行序列化和反序列化
2.1 dump:主要用于json文件的读写,json.dump(x,f),x是对象,f是一个文件对象,这个方法可以将json字符串写入到文本文件中
2.2 load:加载json文件
MessagePack库
是一个基于二进制高效的对象化序列类库,可用于跨语言通信
支持python,ruby,java,C/C++等众多语言
常用方法
Packb序列化对象,提供了dumps兼容pickle和json
Unpackb反序列化对象,提供了loads来兼容
Pack序列化对象保存到文件对象,提供了dump来兼容
Unpack反序列化对象保存到文件对象,提供了load来兼容
注意点
将数据序列化后通过网络传输到远程节点,远程服务器上的服务将接受到的数据反序列化后,就可以使用了,要注意的是,远程接收端,反序列化时候必须有对应的数据类型,否则就会报错。尤其是自己定义的类。必须远程得有一致的定义。