前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【ProtoBuf】1.初识ProtoBuf

【ProtoBuf】1.初识ProtoBuf

作者头像
每天都要进步呀
发布2023-10-16 11:11:37
1650
发布2023-10-16 11:11:37
举报
文章被收录于专栏:C++/LinuxC++/Linux

一. 序列化概念

日常生活中,手机上收到的语音消息在网络中不能直接进行传输,而是通过一系列的信号,比如网络中二进制序列的转换,在传出时将语音消息转化成二进制序列进行网络传输,收到消息时再将二进制序列转化成语音消息,这种过程实际上就是序列化。

image-20230520151823201
image-20230520151823201

我们写的代码同样如此,网络中传输的也一定不是直接创建的对象,而是通过对象转换的二进制序列进行传输。将对象转化为二进制序列的过程称为序列化过程,最后将二进制序列恢复为对象的过程称为反序列过程。

image-20230520153531906
image-20230520153531906

由此可见,上述所说的都是在网络传输中使用。而在本地中,内存中的结构化数据也就是对象只有序列化才能放到文件里面去,这个过程同样需要序列化。此外,数据库、缓存等传入传出同样涉及序列化。

  • 所以什么是序列化和反序列化?

序列化: 把对象转换为字节序列的过程,称为对象的序列化。

反序列化: 把字节序列恢复为对象的过程?称为对象的反序列化。

  • 如何实现序列化?

通过Json、XML、ProtoBuf可以实现序列化。(本文讲的就是ProtoBuf)

二. ProtoBuf

1. 什么是ProtoBuf

ProtoBuf概念:将结构化数据进行序列化的一种方式。

2. ProtoBuf的特点

简单来讲,ProtoBuf(全称为Protocol Buffer)是让结构数据序列化的⽅法。

一. 本身特点:

  • 语⾔⽆关、平台⽆关:即ProtoBuf⽀持Java、C++、Python等多种语⾔,⽀持多个平台。
  • ⾼效:即⽐XML和Json更⼩、更快、更为简单。
  • 扩展性、兼容性好:你可以更新数据结构,⽽不影响和破坏原有的旧程序。

二. 使用特点: ProtoBuf是需要依赖 通过编译生成的头文件和源文件 来使用的。(针对C++来说)

在定义类时,需要进行三件事情:

  1. 定义一系列属性字段。
  2. 处理字段的方法:如get、set。
  3. 处理类的方法:序列化和反序列化(还有其他方法不一一列举)

对于开发者来说,定义属性字段比较简单;而另外两种方法的编写,都属于费力不讨好的活,比较耗时)

3. ProtoBuf进行序列化反序列化的流程

在ProtoBuf中,将类(class)称之为消息(message)

image-20230520155519101
image-20230520155519101

依赖通过编译生成的头文件和源文件实际上就是通过message XXX生成class XXX,并且class XXX在生成时会被打散,生成源文件和头文件。


具体逻辑:

image-20230520161935348
image-20230520161935348
  1. 编写.proto文件,目的是为了定义结构对象(message)及属性内容。
  2. 使用photoc编译器编译.proto文件,生成一系列接口代码,才能放在新生成头文件和源文件中。
  3. 依赖生成的接口,将编译生成的头文件包含进我们的代码中,实现对.proto文件中定义的字段进行设置和获取,和对message对象进行序列化和反序列化。

总的来说:ProtoBuf是需要依赖通过编译⽣成的头⽂件和源⽂件来使⽤的。有了这种代码⽣成机制,开发⼈员再也不⽤吭哧吭哧地编写那些协议解析的代码了(⼲这种活是典型的吃⼒不讨好)。

三. 本章总结

image-20230520161505538
image-20230520161505538
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. 序列化概念
  • 二. ProtoBuf
    • 1. 什么是ProtoBuf
      • 2. ProtoBuf的特点
        • 3. ProtoBuf进行序列化反序列化的流程
        • 三. 本章总结
        相关产品与服务
        语音消息
        语音消息(Voice Message Service,VMS)通过腾讯云提供的语音专线,为客户提供语音告警、语音通知、语音验证码等服务。语音消息具有高到达率、超低延时、秒级触达的优势,致力于提供优质的语音消息服务。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档