Python中序列化和反序列化是什么

  介绍

这篇文章主要介绍Python中序列化和反序列化是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

<强>什么是序列化,反序列化?

序列化:把对象转换为字节序列的过程称为对象的序列化。

反序列化:把字节序列恢复为对象的过程称为对象的反序列化。

自我理解:

在代码运行时,我们看到很多的对象,可以是一个,也可以是一类对象的集合,很多的对象数据,这些数据中,有些信息我们想让它持久的保存起来,那么这个就需要做:

数据写入,》》》* *序列化* *,就是把内存里面的这些对象给变成一连串的字节描述的过程。

常见的就是把项目中的数据写入,变成文件保存本地。

同样的,如果要把保存的文件读取出来,成为数据显示在我们的项目中,或者己用。

那么就需要做:

文件读取》》》* *反序列化* *,就是把文件中一连串的字节转为一个对象放入内存里存放的过程。

虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化ID是否一致(比如java常见的私有静态最终长serialVersionUID=1 l)。

清单1中,虽然两个类的功能代码完全一致,但是如果序列化ID值不同,他们无法相互序列化和反序列化。

简单来说,java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。

<强>什么情况下需要序列化?

当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;

当你想用套接字在网络上传送对象的时候,

当你想通过RMI传输对象的时候,

(最常用的可能就存数据库的)

<强>实现序列化

1。java中

在java中序列化和反序列化实现:java序列化序列化接口。

public  class  xxx  implements  Serializable  {   ,private  static  final  long  serialVersionUID =, 1 l   }

2。python中

在python中,泡菜模块就用来实现数据序列化和反序列化。

(1)只能在python中使用,只支持python的基本数据类型。

(2)可以处理复杂的序列化语法。(例如自定义的类的方法,游戏的存档等)

(3)序列化的时候,只是序列化了整个序列对象,而不是内存地址。

需要引入:

import 泡菜

<强>一、转储()方法

pickle.dump (obj,,文件,,[、协议])

写入文件并序列化:

import 困境   时间=test  " # 39;用法# 39;   #反序列化代码中也要定义相同的函数名称,函数体没限制   def  sayhi(名称):   ,,,印刷(“hello",名称)   info =, {   ,,,& # 39;& # 39;:& # 39;& # 39;   ,,,& # 39;年龄# 39;:32岁   ,,,& # 39;func # 39;: sayhi   }   print (pickle.dumps(信息))   with 开放(测试& # 39;wb # 39;), as  f:   ,,,# f.write (, pickle.dumps(信息),)   ,,,pickle.dump(信息,f),, #跟上面的f.write (, pickle.dumps(信息),)语意完全一样。

注释:序列化对象,将对象obj保存到文件文件中去。参数协议是序列化模式,默认是0 (ASCII协议,表示以文本的形式进行序列化),协议的值还可以是1和2(1和2表示以二进制的形式进行序列化,其中,1是老式的二进制协议,2是新二进制协议).file表示保存到的类文件对象,文件必须有写()接口,文件可以是一个以' w '打开的文件或者是一个StringIO对象,也可以是任何可以实现写()接口的对象。

<强>二、负载()方法

pickle.load(文件)

从文件中读取,并返序列化:

import 困境   时间=test  " # 39;用法# 39;   #需要定义序列化代码中同样的函数名,函数体没限制   def  sayhi(名称):   ,,,印刷(“hello",名称)   ,,,印刷(“hello2",名称)   with 开放(测试& # 39;rb # 39;), as  f:   ,,,#,data =, pickle.loads (f.read ())   ,,,data =, pickle.load (f),, #跟上面的data =, pickle.loads (f.read())语意完全一样。   ,,,print (& # 39; data>在祝辞& # 39;,数据)   打印(数据(& # 39;func # 39;] (“Alex"))

注释:反序列化对象,将文件中的数据解析为一个python对象.file中有阅读()接口和readline()接口

一般来说在python中,两个方法是连用的。

Python中序列化和反序列化是什么