Skip to content

The serialization & trans serialization in Python

Stack_sqx edited this page Feb 13, 2020 · 2 revisions

为什么要序列化

因为TCP/IP协议只支持字节数组的传输,不能直接传对象。

  • 对象序列化的结果是字节数组,当两个进程在进行远程通信时,彼此可以发送各种类型的数据。
  • 无论是何种类型的数据,都会以二进制序列的形式在网络上传送。
  • 发送方需要把这个对象转换为字节序列,才能在网络上传送;
  • 接收方则需要把字节序列再恢复为对象。

python pickle

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 输入流

  • 重建属性列表

  • 根据类名创建一个新的对象

  • 将属性复制到新的对象中

Welcome to the web playground

Inspired by @LFYSec

Clone this wiki locally