序列化和反序列化
为什么要序列化
内存中的字典、列表、集合以及各种对象,如何保存到一个文件中?
如果是自己定义的类的实例,如何保存在一个文件中?
如何从文件中读取数据,并让他们在内存中再次回复称自己对应的类的实例?
要设计一套协议,按照某种规则进行转换,转换后的数据可以用来存储或者传输。文件是一个字节序列,所以必须把数据转换成字节序列(可以害死),输出到文件。这就是序列化。反之从文件的字节序列恢复到内存并且还是原来的类型,这就是反序列化。
序列化协议的特点
- 跨平台,并有多语言支持。这是根本目的。
- 足够流行,意味着使用者众多,协议的基础设施迭代更新快。
- 足够成熟,意味着协议经过足够的测试,和足够时间的检验。
- 语言/平台的中立性,意味着协议对各个编程语言、操作系统的特性支持保持一致。
- 可读性,如果数据序列化之后的数据人眼可读,那么开发过程对序列化数据的调试就会变得非常简单。
- 性能,为了保持原有的数据结构,数据在序列化的过程中,必然会加进额外的描述字段。加入额外的字段,必然会使序列化后的大小大于纯数据的大小,同时也会涉及到序列化、反序列化对描述字段的解读效率的问题。因此一个好的序列化协议,应该在空间复杂度和时间复杂度上有好的表现。
pickle库
python中的序列化、反序列化模块。
函数 | 说明 |
---|---|
dumps | 对象序列化为 |