-
Notifications
You must be signed in to change notification settings - Fork 0
The serialization & trans serialization in Python
Stack_sqx edited this page Feb 13, 2020
·
2 revisions
因为TCP/IP协议只支持字节数组的传输,不能直接传对象。
- 对象序列化的结果是字节数组,当两个进程在进行远程通信时,彼此可以发送各种类型的数据。
- 无论是何种类型的数据,都会以二进制序列的形式在网络上传送。
- 发送方需要把这个对象转换为字节序列,才能在网络上传送;
- 接收方则需要把字节序列再恢复为对象。
Python中的序列化、反序列化模块
- dumps对象序列化为bytes对象
- dump对象序列化到文件对象,就是存入到文件
- loads从bytes对象反序列化
- load对象反序列化,从文件读取数据
import pickle
filename = 'ser'
x= 'a'
y = '100'
z = '100'
with open(filename,'wb') as f:
pickle.dump(x,f)
pickle.dump(y,f)
pickle.dump(z,f)
with open(filename,'rb')as f:
for _ in range(3):
a = pickle.load(f)
print(a,type(a))
序列化应用
- 一般来说,本地序列化的情况,应用较少,大多数都是用在网络传输上面的。
- 将数据序列化后通过网络传输到远程节点,远程服务器上的服务将接受到的数据反序列化后,就可以使用了。
- 但是,要注意的是,远程接收端,反序列化时候必须有对应的数据类型,否则就会报错
-
从对象提取所有属性,并将属性转化为名值对
-
写入对象的类名
-
写入名值对
-
获取 pickle 输入流
-
重建属性列表
-
根据类名创建一个新的对象
-
将属性复制到新的对象中