值得推荐:【序列化】浅谈对序列化的理解(转载)

【序列化】浅谈对序列化的理解(转载)

 

原文链接:https://juejin.cn/post/7398045655775248421

 

浅谈对序列化的理解

1、为什么要进行序列化?

序列化(Serialization)是将对象的状态转换为可存储或传输的格式的过程。在编程和数据处理领域,序列化具有以下几个主要用途和好处:

  • 数据持久化: 序列化可以将对象的状态保存到文件、数据库或其他存储介质中,以便在之后的程序运行中恢复(反序列化)这些对象。这对于保存应用程序状态、缓存数据等非常有用。
  • 跨网络传输: 在分布式系统或网络应用中,序列化用于将对象转换为可在网络上传输的格式。例如,Web服务中通常会将数据序列化为JSON或XML格式,以便在客户端和服务器之间传递。
  • 数据交换: 序列化使得不同编程语言或平台之间能够进行数据交换。通过将数据序列化为一种通用格式(如JSON、XML或Protocol Buffers),不同的系统可以互相理解和处理这些数据。
  • 复制与深拷贝: 序列化可以用于对象的复制,特别是深度复制(deep copy)。通过序列化和反序列化,可以创建对象的完全副本,而不共享原对象中的引用。
  • 调试和日志记录: 序列化后的数据可以用于调试和日志记录,以便在出现问题时分析和重现程序的状态。

2、什么是序列化?

  • 序列化是指将对象实例的状态存到存储媒体的过程;
  • 反序列化是指将存储在存储媒体中的对象状态装换成对象的过程。

用抽象的概念来讲:

  • 序列化: 把对象转化为可传输的字节序列过程;

图片[1]-值得推荐:【序列化】浅谈对序列化的理解(转载)-VR全景

  • 反序列化: 把字节序列还原为对象的过程。

图片[2]-值得推荐:【序列化】浅谈对序列化的理解(转载)-VR全景

3、常见的序列化的方式

1. JSON(JavaScript Object Notation)

  • 特点:轻量级、可读性强、易于使用。
  • 用途:广泛用于前后端数据交换、Web API。
  • 优势:语言无关,支持大多数编程语言,易于解析和生成。
  • 劣势:不支持二进制数据,效率相对较低。

2. XML(Extensible Markup Language)

  • 特点:自描述性强,结构化良好,支持复杂数据类型。
  • 用途:数据交换、配置文件、文档标记。
  • 优势:广泛支持,良好的兼容性和扩展性。
  • 劣势:冗长,解析和生成效率较低。

3. Protocol Buffers(Protobuf)

  • 特点:由Google开发的高效二进制序列化格式。
  • 用途:网络通信、数据存储、RPC系统。
  • 优势:高效、数据压缩好,支持多种编程语言。
  • 劣势:需要定义.proto文件,二进制格式不易阅读。

4. MessagePack

  • 特点:高效的二进制序列化格式,类似于JSON。
  • 用途:网络通信、数据存储。
  • 优势:紧凑、效率高,支持复杂数据结构。
  • 劣势:二进制格式,不适合人类阅读。

5. BSON(Binary JSON)

  • 特点:二进制格式的JSON,主要用于MongoDB。
  • 用途:NoSQL数据库文档存储。
  • 优势:支持更多的数据类型,便于解析和快速查询。
  • 劣势:格式相对复杂,适合特定用途。

其中,JSONXML 是最为广泛使用的序列化格式,尤其是在Web开发和跨平台数据交换中。Protocol BuffersMessagePack 则因其高效和紧凑性,常用于需要高性能的场景。BSON 主要应用于MongoDB等特定的NoSQL数据库中。

4.小结一下

(1)为什么我们要序列化?

因为我们需要将内存中的对象存储到媒介中,或者我们需要将一个对象通过网络传输到另外一个系统中。

(2)什么是序列化?

序列化就是把对象转化为可传输的字节序列过程;反序列化就是把字节序列还原为对象的过程。

(3)序列化的机制

序列化最终的目的是为了对象可以跨平台存储进行网络传输,而我们进行跨平台存储和网络传输的方式就是 IO,而 IO 支持的数据格式就是字节数组

将对象转成字节数组的时候需要制定一种规则,这种规则就是序列化机制。

(4)常见序列化的方式

现在常见的序列化方式有:JSON、ProtoBuf、XML、MessagePack、BSON等。

(5)序列化技术的选型

选型最重要的就是要考虑这三个方面:协议是否支持跨平台序列化的速度序列化生成的体积

作者:_Leo同学
链接:https://juejin.cn/post/7398045655775248421
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

 

转载请保留原文链接:http://blog.hzzx3d.com/3926.html

 

 

© 版权声明
THE END
喜欢就支持一下吧
点赞69 分享
相关推荐