📜  序列化和反序列化 (1)

📅  最后修改于: 2023-12-03 14:54:09.032000             🧑  作者: Mango

序列化和反序列化

在计算机科学中,序列化和反序列化是将对象或数据结构转换为一系列字节,以便将其存储到文件或在网络上传输,或者将存储的字节重新转换为对象或数据结构的过程。

序列化

序列化是将一个对象转换为字节流的过程。在这个过程中,对象的属性数据被写入到字节流中,并且对象的类型信息也被包含在字节流中。序列化后的数据可以被保存到硬盘、通过网络传输等等。

常见的序列化方式有JSON、XML、二进制等。例如,将一个Python对象序列化为JSON格式的代码如下:

import json

# 将Python对象转换为JSON字符串
data = {"name": "Alice", "age": 20}
json_str = json.dumps(data)

# 将JSON字符串转换回Python对象
obj = json.loads(json_str)

Python也提供了pickle模块实现序列化,pickle还支持对Python代码的序列化。例如,将一个Python对象序列化为pickle格式的代码如下:

import pickle

# 将Python对象转换为pickle字符串
data = {"name": "Bob", "age": 30}
pickle_str = pickle.dumps(data)

# 将pickle字符串转换回Python对象
obj = pickle.loads(pickle_str)
反序列化

反序列化是将一个字节流转换为对象的过程。在这个过程中,字节流中的数据被读取并转换为对象的属性,对象的类型信息也被从字节流中读取出来用于实例化对象。

常见的反序列化方式有JSON、XML、二进制等。例如,将一个JSON格式的数据反序列化为Python对象的代码如下:

import json

# 将JSON字符串转换为Python对象
json_str = '{"name": "Carol", "age": 40}'
obj = json.loads(json_str)

反序列化也可以使用pickle模块实现。例如,将一个pickle格式的数据反序列化为Python对象的代码如下:

import pickle

# 将pickle字符串转换为Python对象
pickle_str = b'\x80\x04\x95\x0f\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04name\x94\x8c\x03Dan\x94\x8c\x03age\x94K\x1e\x87\x94.'
obj = pickle.loads(pickle_str)
序列化和反序列化的应用场景

序列化和反序列化常常用于以下场景:

  • 将对象或数据结构存储到数据库或硬盘上;
  • 将对象或数据结构通过网络发送给其他进程或机器上;
  • 将对象或数据结构传递给其他模块或子进程,以便跨进程或线程共享数据;
  • 在测试中模拟对象或数据结构的返回值。