Xml,Json,Protobuffer等序列化的区别。如何选型

news/2024/9/23 14:33:56/
xmlns="http://www.w3.org/2000/svg" style="display: none;">

Xml,Json,Protobuffer等序列化的区别。如何选型

序列化:将对象转换为字节序列的过程称为对象的序列化;
反序列化:将字节序列恢复为对象的过程称为对象的反序列化;
什么时候需要序列化?
当你需要把内存中的对象保存到一个文件中、数据库中、或者通过网络传输的时候

如何序列化?
主流序列化协议:xmljsonprotobuf

以C# 类对象为例

public class Parameter
{public int Number { get; set; }
}public class Root
{public int BuildTarget { get; set; }public string BuildResultHash { get; set; }public int BuildType { get; set; }public Parameter Parameter { get; set; }
}// 实例化 Root
Root root = new Root();
root.BuildTarget = 19;
root.BuildResultHash = "917306b00a02cd400740cff00f554561";
root.BuildType = 0;root.Parameter = new Parameter();
root.Parameter.Number = 50;

Root 序列后数据格式如下
XML 格式如下

xml"><?xml version="1.0" encoding="UTF-8"?>
<o><BuildResultHash type="string">917306b00a02cd400740cff00f554561</BuildResultHash><BuildTarget type="number">19</BuildTarget><BuildType type="number">0</BuildType><Parameter class="object"><Number type="number">50</number></Parameter>
</o>

Json 格式如下

{"BuildTarget": 19,"BuildResultHash": "917306b00a02cd400740cff00f554561","BuildType": 0,"Parameter": {"Number": 50}
}

Proto 格式如下

40 8 19 18 32 57 49 55 51 48 54 98 48 48 97 48 50 99 100 52 48 48 55 52 48 99 102 102 48 48 102 53 53 52 53 54 49 34 2 8 50

XML 简介
XML 被设计用来传输和存储数据。
XML 指可扩展标记语言(eXtensible Markup Language)。
可扩展标记语言(英语:Extensible Markup Language,简称:XML)是一种标记语言,是从标准通用标记语言(SGML)中简化修改出来的。以文本结构进行存储。它可以用来标记数据、定义数据类型,提供统一的方法来描述和交换,而且独立于程序语言或供应商的结构化数据。xml有丰富的编码工具,比如DOM、SAX等。xml的解析方式有两种:

Json 简介
JSON(JavaScript Object Notation,JavaScript对象表示法)是基于ECMAScript的一个子集设计的,是一种开放标准的文件格式和数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。JSON独立于语言设计,很多编程语言都支持JSON格式的数据交换。JSON是一种常用的数据格式,在电子数据交换中有多种用途,包括与服务器之间的Web应用程序的数据交换。其简洁和清晰的层次结构有效地提升了网络传输效率,使其成为理想的数据交换语言。其文件通常使用扩展名.json

Protobuf 简介
协议缓冲区(又名 protobuf)是 Google 的语言中立、平台中立、可扩展的结构化数据序列化机制。类似 XML,但更小、更快、更简单)。
以二进制结构进行存储,可以用于结构化数据串行化,或者序列化
可用于通讯协议、数据存储等领域
与语言无关、平台无关、可扩展的序列化结构数据格式

您只需定义一次数据的结构,然后就可以使用专门生成的源代码轻松地将结构化数据写入各种数据流并使用各种语言读取数据

您可以在 protobuf 的文档 中了解更多信息。

Json 比 XML 更小、更快、更易解析

Protobuf 优点:
1.二进制结构存储,效率高,序列化体积比 Json 和 Xml 更小,更加灵活
2.格式规范,支持 RPC
3.易于使用,开发人员可以按照一定的语法定义结构化的消息格式,然后发送给命令行工具,工具将自动生成相关语言的类,支持 Java、C++、C#等多种语言环境。通过把生成的类包含在项目中,可以轻松的调用相关方法来完成业务消息的序列化和反序列化

Protobuf缺点:
1.可读性低


http://www.ppmy.cn/news/1505053.html

相关文章

深入C# .NET核心:委托与事件机制全解析

摘要&#xff1a; 在C# .NET编程中&#xff0c;委托和事件是实现异步编程和对象间通信的关键机制。理解它们的工作原理对于编写高效、响应式的应用程序至关重要。本文将深入探讨C# .NET中的委托与事件&#xff0c;从基础概念到高级应用&#xff0c;为读者提供全面的指导。 正文…

IDC权威认可:亚信安全引跑中国DDI市场

近日&#xff0c;国际数据公司&#xff08;IDC&#xff09;正式发布了《IDC China Semiannual DDI Tracker, 2023H2》&#xff0c;亚信安全域名服务和地址分配及管理系统&#xff08;AIDDI&#xff09;凭借在企业核心网络防护中自动化、安全性、智能化的突出能力&#xff0c;占…

引领未来的智能革命:深度解析【人工智能】前沿技术与应用

前几天偶然发现了一个超棒的人工智能学习网站&#xff0c;内容通俗易懂&#xff0c;讲解风趣幽默&#xff0c;简直让人欲罢不能。忍不住分享给大家&#xff0c;点击这里立刻跳转&#xff0c;开启你的AI学习之旅吧&#xff01;前言 – 人工智能教程https://www.captainbed.cn/lz…

C# ?的使用

栏目总目录 可空类型标记符&#xff08;?&#xff09; 说明&#xff1a; 可空类型标记符?用于指示某个值类型&#xff08;如int、float等&#xff09;可以为null。这是C# 2.0引入的一个特性&#xff0c;用于处理数据库查询、JSON解析等场景中可能出现的空值。 示例代码&am…

深入研究Java的String常量池

文章目录 一、StringTable分析一段代码示例一示例二示例三 二、 intern1、StringTable位置2、StringTable 性能调优3、intern深入分析3.1 思考3.2 JDK6中的解释3.3 JDK7中的解释3.4 详细分析3.5 intern正确使用的例子3.6 intern使用不当的例子 一、StringTable 常量池中的字符…

PatchCore:工业异常检测中的全面召回

PatchCore&#xff1a;工业异常检测中的全面召回 前言相关介绍PatchCore的工作原理&#xff1a;优点&#xff1a;缺点&#xff1a; 实验环境项目地址LinuxWindows 项目结构具体用法准备数据进行训练进行测试 常见问题ModuleNotFoundError: No module named patchcore解决方法 O…

[PM]面试题-综合问题

思维题 说说当前的科技行业 web3是我比较感兴趣的方向, 在国内还处于起步阶段, web3重要的特点是去中心化, 依赖的技术有以太坊, 区块链, 智能合约, 现在位置还没有特别成熟的产品形态, 发展的比较好的方向就是数字藏品和游戏方向 列举一个你认为比较好的APP, 说明其独特之处…

一则悬空指针案例

int* foo() {int a; // 变量a的作用域开始a 100;char *c "xyz"; // 变量c的作用域开始return &a; } // 变量a和c的作用域结束先来看这样一段代码。这段代码虽然可以编译通过&#xff0c;但是其实非常糟糕&#xff0c;变量 a 和 c…