国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > Python基础教程 > Python序列化和反序列化

Python序列化和反序列化

头像

爱喝马黛茶的安东尼

2019-11-30 15:03:112411浏览 · 0收藏 · 0评论

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

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

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

自我理解:

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

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

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

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

那么就需要做:

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

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

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

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

什么情况下需要序列化?

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

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

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

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

实现序列化

1.java中

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

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

2.python中

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

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

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

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

需要引入:

import pickle

一、dump()方法

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

写入文件并序列化:

import pickle
test = r'test.txt'
#反序列化代码中也要定义相同的函数名称,函数体没限制
def sayhi(name):
    print("hello",name)
info = {
    '':'',
    'age':32,
    'func':sayhi
}
print(pickle.dumps(info))
with open(test,'wb') as f:
    #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)

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

import pickle
test = r'test.txt'
#需要定义序列化代码中同样的函数名,函数体没限制
def sayhi(name):
    print("hello",name)
    print("hello2",name)
with open(test,'rb') as f:
    # 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

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

真爱禁区电视剧免费观看全集| 美女和帅哥一起努力生产豆浆的视..| 无风险9.1免费版观看| 春夜电视剧全集免费观看韩剧| 二人世界一男一女| 姨母的绣感中字2| B站暴躁姐的丈夫是干什么的| 老公不在我和公发| 无人区在线观看免费播放电视剧| 机械师曙光| 苍井空AV成人片免费观看| 臣卜扌桑扌圭辶鬲爸爸| 麻花传媒的短视频制作技巧和方法 | 人犬兽人在线观看免费完整一| 免费的行情网站WWW下载大全| 成品人和精品人的区别在哪里知乎| 窝窝影院在线观看免费播放电视剧| 小妹妹爱大棒棒免费观看电视剧| 跳抖胸舞| 强壮公借种日日躁我| 薰樱子| 男女| 白色变态蕾丝超薄开档连身袜| 豆传媒剧国产MV有什么特点| 11人裸体航班女服务员是谁| 《互换人妻HD中字》| 免费B站看大片真人电视剧| 宝贝今天可不可以不带小雨伞 | 麦子交换2免费完整版| 《共享弟夫》动漫在线观看免费 | 《法国空乘4》在线观看| 青梅竹马是消防员第一部| 春夜影院电视剧免费播放| 100%透光裸妆| 庄锶敏| 《请好好疼爱里面》免费观看| 公交车被上高湖了还能坐吗小说| 《警花交换做爰》| 亚洲尺码与欧洲尺码区别专线| 一母四女共一婿的全诗解读| 每日大赛吃瓜爆料每日大赛聚集地