当前位置: 首页 > article >正文

今日总结10.28

序列化和反序列化

序列化和反序列化是计算机科学中两个非常重要的概念,尤其在数据持久化、网络传输和对象存储等领域。下面分别解释这两个概念及其应用场景。

序列化(Serialization)

序列化是指将对象的状态转换为可存储或可传输的格式(如JSON、XML、二进制等)的过程。这样做的目的是让对象的状态可以被持久化存储(例如保存到文件中),或者通过网络传输到另一个系统或进程。

常见的序列化格式:
  1. JSON (JavaScript Object Notation):一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。
  2. XML (eXtensible Markup Language):一种标记语言,用于存储和传输数据。它比JSON更为冗长,但更具表达力和扩展性。
  3. 二进制格式:直接将对象转换为二进制数据,这种方式通常比文本格式(如JSON、XML)更加高效,但可读性差。
序列化示例(Python):
import json  
  
class Person:  
    def __init__(self, name, age):  
        self.name = name  
        self.age = age  
  
    def to_dict(self):  
        return {"name": self.name, "age": self.age}  
  
person = Person("Alice", 30)  
serialized_person = json.dumps(person.to_dict())  
print(serialized_person)  # 输出: {"name": "Alice", "age": 30}

反序列化(Deserialization)

反序列化是指将已序列化(存储或传输)的对象状态重新转换回对象的过程。通过反序列化,可以恢复对象的状态,使其能够在程序中继续使用。

反序列化示例(Python):
import json  
  
class Person:  
    def __init__(self, name, age):  
        self.name = name  
        self.age = age  
  
    @staticmethod  
    def from_dict(d):  
        return Person(d["name"], d["age"])  
  
serialized_person = '{"name": "Alice", "age": 30}'  
person_dict = json.loads(serialized_person)  
deserialized_person = Person.from_dict(person_dict)  
print(deserialized_person.name, deserialized_person.age)  # 输出: Alice 30

应用场景

  1. 持久化存储:将对象的状态保存到文件中,以便在程序重启后恢复对象状态。
  2. 网络传输:将对象序列化为二进制或文本格式,通过网络发送到另一个系统或进程,接收端再进行反序列化以恢复对象。
  3. 远程调用:在分布式系统中,通过序列化传输对象的状态,实现远程方法调用(RPC)。
  4. 缓存:将对象序列化为字符串或二进制数据,存储在缓存中,提高数据访问速度。

常见序列化协议有哪些

常见的序列化协议有多种,每种协议都有其独特的特点和适用场景。以下是一些常见的序列化协议:

  1. JSON(JavaScript Object Notation)
    • 一种轻量级的数据交换格式,易于阅读和编写。
    • 基于JavaScript语言的一个子集,但可以被多种编程语言使用。
    • 支持复杂的数据结构,包括数组、对象、字符串、数字等。
    • 广泛应用于Web开发、移动开发等领域。
  2. XML(eXtensible Markup Language)
    • 一种标记语言,用于描述数据的结构和内容。
    • 具有良好的可扩展性和跨平台性。
    • 可以通过DTD(Document Type Definition)或XSD(XML Schema Definition)定义数据的结构。
    • 常用于配置文件、数据交换等领域。
  3. Protocol Buffers(protobuf)
    • 由Google开发的一种二进制序列化协议。
    • 使用简洁的接口描述语言来定义数据结构,并生成相应的代码进行序列化和反序列化操作。
    • 具有高效的编码和解码速度,以及较小的数据体积。
    • 广泛应用于RPC(远程过程调用)、数据存储等领域。
  4. Thrift
    • 由Facebook开发的一种跨语言的服务框架,也包含了一种二进制序列化协议。
    • 使用IDL(Interface Description Language)来定义数据结构和服务接口,并生成相应的代码进行序列化和反序列化操作。
    • 支持多种编程语言,并提供了高效的网络通信能力。
    • 常用于RPC、微服务等领域。
  5. MessagePack
    • 一种高效的二进制序列化协议,类似于JSON。
    • 将数据压缩为二进制格式,具有较小的数据体积和高速的编码解码能力。
    • 支持多种编程语言,并且可以与JSON相互转换。
    • 适用于需要高效数据传输和存储的场景。
  6. Avro
    • 一种基于Schema的二进制序列化协议,由Apache开发。
    • 使用JSON来定义数据结构,并将数据编码为紧凑的二进制格式。
    • 支持动态类型、架构演化和跨语言等特性。
    • 常用于大数据处理、Hadoop生态系统等领域。
  7. Fastjson
    • 一种针对Java语言的JSON序列化/反序列化库。
    • 采用“假定有序快速匹配”的算法,具有较快的处理速度。
    • 但需要注意其安全性和稳定性问题,避免在不受信任的数据源上使用。
  8. 其他序列化协议
    • 如protostuff、Jboss marshaling、Hessian、kryo等,这些协议各有特点,适用于不同的应用场景。

http://www.kler.cn/a/371073.html

相关文章:

  • 上传自己的镜像到docker hub详细教程
  • TCP-IP详解卷 TCP的超时与重传
  • 自建RustDesk服务器
  • 蓝桥杯备赛:顺序表和单链表相关算法题详解(上)
  • 大疆机场及无人机上云
  • 【Unity功能集】TextureShop纹理工坊(十三)打开、保存工程【TSD文件】(终章)
  • Android WebView加载不到cookie
  • Trains-03练习-结构
  • Android -- 调用系统相册之图片裁剪保存
  • java-web-day5
  • 科东软件荣获2024年广州科技创新创业大赛轨道交通行业赛“创新突围奖”
  • 有符号除法 简单的带小数计算及权重约束_2024年10月7日
  • Java Lock CountDownLatch 总结
  • 机器人转人工时,开启实时质检(mod_cti基于FreeSWITCH)
  • 计算机网络IP地址分类,子网掩码,子网划分复习资料
  • kafka 的高可用机制是什么?
  • zabbix 6.0 监控clickhouse(单机)
  • Spring 启动流程分析
  • 橘子多开同步器 v6.0 免费版
  • Redis-README官方入门文档
  • 【JSON相关漏洞(Hijacking+Injection)挖掘技巧及实战案例全汇总】
  • 基于Qt的多线程并行和循序运行实验Demo
  • yolov8环境搭建+训练自己的数据集
  • Notepad++如何同时检索多个关键字
  • 单目相机标定
  • PG数据库之视图详解