
什么是序列化,反序列化?
序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。
自我理解:
在代码运行时,我们看到很多的对象,可以是一个,也可以是一类对象的集合,很多的对象数据,这些数据中,有些信息我们想让它持久的保存起来,那么这个就需要做:
1 |
|
常见的就是把项目中的数据写入,变成文件保存本地。
同样的,如果要把保存的文件读取出来,成为数据显示在我们的项目中,或者己用。
那么就需要做:
1 |
|
虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化 ID 是否一致(比如java常见的 private static final long serialVersionUID = 1L)。
清单 1 中,虽然两个类的功能代码完全一致,但是如果序列化 ID值 不同,他们无法相互序列化和反序列化。
简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。
什么情况下需要序列化?
当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
当你想用套接字在网络上传送对象的时候;
当你想通过RMI传输对象的时候;
(最常用的可能就存数据库的)
实现序列化
1.java中
在java中序列化和反序列化实现:Java Serializable 序列化接口。
1 2 3 |
|
2.python中
在Python中,Pickle模块就用来实现数据序列化和反序列化。
(1)只能在python中使用,只支持python的基本数据类型。
(2)可以处理复杂的序列化语法。(例如自定义的类的方法,游戏的存档等)
(3)序列化的时候,只是序列化了整个序列对象,而不是内存地址。
需要引入:
1 |
|
一、dump()方法
1 |
|
写入文件并序列化:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
注释:序列化对象,将对象obj保存到文件file中去。参数protocol是序列化模式,默认是0(ASCII协议,表示以文本的形式进行序列化),protocol的值还可以是1和2(1和2表示以二进制的形式进行序列化。其中,1是老式的二进制协议;2是新二进制协议)。file表示保存到的类文件对象,file必须有write()接口,file可以是一个以’w’打开的文件或者是一个StringIO对象,也可以是任何可以实现write()接口的对象。
二、load()方法
1 |
|
从文件中读取,并返序列化:
1 2 3 4 5 6 7 8 9 10 11 |
|
注释:反序列化对象,将文件中的数据解析为一个python对象。file中有read()接口和readline()接口
一般来说在python中,两个方法是连用的。
python学习网,大量的免费python视频教程,欢迎在线学习!
本文转自:https://blog.csdn.net/ITBigGod/article/details/86477083