当前位置: 首页 > 图灵资讯 > 行业资讯> Python序列化和反序列化

Python序列化和反序列化

发布时间:2025-04-06 15:39:40

什么是序列化,反序列化?

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

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

自我理解:

当代码运行时,我们可以看到很多对象,可以是一个或一个对象的集合,很多对象数据,这些数据,一些信息我们希望它保存很长时间,所以这需要做:

“数据写入”**序列化**-是将内存中的这些对象变成一系列字节描述的过程。

将项目中的数据写入到文件保存本地是很常见的。

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

然后你需要做:

“文件读取”**反序列化**-是将文件中的一系列字节转换为一个对象并存储在内存中的过程。

虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,还取决于两类的序列化。 ID 是否一致(例如Java常见的Java) private static final long serialVersionUID = 1L)。

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

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

在什么情况下需要序列化?

当您想将内存中的对象状态保存到文件或数据库中时;

当你想用套接字在网络上传输对象时;

当你想通过RMI传输对象时;

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

实现序列化

1.java中

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

publicclassxxximplementsSerializable{
privatestaticfinallongserialVersionUID=1L
}

2.python中

Python中,Pickle模块用于实现数据序列化和反序列化。

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

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

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

需要引入:

importpickle

一、dump()方法

pickle.dump(obj,file,[,protocol])

并序列化写入文件:

importpickle
test=r'test.txt'
#同一函数的名称也应在反序列化代码中定义,函数体没有限制
defsayhi(name):
print("hello",name)
info={
'':'',
'age':32,
'func':sayhi
}
print(pickle.dumps(info))
withopen(test,'wb')asf:
#f.write(pickle.dumps(info))
pickle.dump(info,f)#跟上面的f.write(pickle.dumps(info))语意完全一样。

注:序列化对象,将对象obj保存到文件file中。参数protocol是一种序列化模式,默认为0(ASCII协议,表示以文本的形式序列化)。protocol的值也可以是1和2(1和2,表示以二进制的形式序列化。其中,1是旧的二进制协议;2是新的二进制协议)。file表示,file必须有write()接口,file可以是“w打开的文件或StringIO对象,也可以是任何可以实现write()接口的对象。

二、load()方法

pickle.load(file)

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

importpickle
test=r'test.txt'
#在序列化代码中定义相同的函数名,函数体没有限制
defsayhi(name):
print("hello",name)
print("hello2",name)
withopen(test,'rb')asf:
#data=pickle.loads(f.read())
data=pickle.load(f)#跟着上面的data=pickle.loads(f.read()语义完全一样。
print('data>>>',data)
print(data['func']("Alex"))

注:反序列化对象将文件中的数据分析为python对象。file包括read()接口和readline()接口

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

d753abdfe7a058329f51382442871c4.png

python学习网,大量免费python视频教程,欢迎在线学习!

本文转自:https://blog.csdn.net/ITBigGod/article/details/86477083

相关文章

如何让vim支持python3

如何让vim支持python3

2025-09-12
python2.7和3.6区别有哪些

python2.7和3.6区别有哪些

2025-09-12
python3有serial库吗

python3有serial库吗

2025-09-12
python中w、r表示什么意思

python中w、r表示什么意思

2025-09-12
python中如何把list变成字符串

python中如何把list变成字符串

2025-09-12
python命名空间是什么

python命名空间是什么

2025-09-12