首页 > 其他分享 >Protocol Buffers 使用笔记

Protocol Buffers 使用笔记

时间:2024-12-25 15:30:54浏览次数:3  
标签:Protocol name age 笔记 byte 序列化 Buffers

Protocol Buffers 使用笔记

  • created: 2024-03-04T11:11+08:00
  • modified: 2024-11-26T15:28+08:00
  • published: 2024-12-25T15:30+08:00
  • categories: applications

Protocol Buffers 简称 protobuf 或者 PB,要解决的问题是这样的:
在互联网上传输大量数据,如果使用 json 等类似格式,会造成大量开销:

[
    {
        "name": "Alice",
        "age": 16
    },
    {
        "name": "Bob",
        "age": 20
    }
]

如果有 1000 个人,'name' 和 'age' 就要出现 1000 次,还有各种换行符之类的开销。
最费时的是,age 看起来是 char,实际要使用的时候是 int,要做类型转换。

如果可以用一份配置文件表示传输 name 和 age,一个数据块直接存储 (name,age) 数组,就可以避免很大的开销。

配置文件:[(name:string, age:int32)]
数据:[(Alice,16),(Bob,20)]

这就是 Protocol Buffers 的想法:根据一份对数据的描述文件,对不同编程语言生成对应的「类」,实现对象的序列化和反序列化。

下载编译器,对 .proto 编译,得到对应的类文件,包括 Go, CPP, Python 等。

Protocol Buffers 的中文翻译「协议缓冲」,就好像不同数据传输协议之间的一个缓冲一样。

Overview | Protocol Buffers Documentation
Protocol Buffer Basics: C++ | Protocol Buffers Documentation

zigzag-varint

Varint 中的每个 byte 的最高位 bit 有特殊的含义,如果该位为 1,表示后续的 byte 也是该数字的一部分,如果该位为 0,则结束。
其他的 7 个 bit 都用来表示数字。因此小于 128 的数字都可以用一个 byte 表示。
大于 128 的数字,比如 300,会用两个字节来表示:1010 1100 0000 0010。
下图演示了 Google Protocol Buffers 如何解析两个 bytes。注意到最终计算前将两个 byte 的位置相互交换过一次,这是因为 Google Protocol Buffers 字节序采用 little-endian 的方式。

varint-encoding

protobuf 的序列化实现方式

标签:Protocol,name,age,笔记,byte,序列化,Buffers
From: https://www.cnblogs.com/dutrmp19/p/18630543

相关文章

  • ROS(Python)简易笔记 3.运行管理
    前言在多级层深的ROS系统中,其实现与维护可能会出现一些问题。运行管理部分就是为了解决这些问题。这一章有元功能包、launch文件管理、和一些重名情况的处理。元功能包元功能包就是把一些功能包打包到一起,当需要安装这些功能包时可以直接调用元功能包,而不需要逐个安装。......
  • 读书笔记:Kubernetes设计模式
    Kubernetes设计模式,BilginIbryam,RolandHuB著前言.3使用代码示例本书主页:https://k8spatterns.io/Github:https://github.com/k8spatterns/第1章引言131.1云原生之路.131.2分布式原语.15概念本地原语分布式原语行为封装类容器镜像行为实例对......
  • 零基础大语言模型学习笔记
    ChatGPT的横空出世惊艳了世人,让人们对大语言模型(LargeLanguageModel,LLM)和生成式人工智能(ArtificialIntelligenceGeneratedContent,AIGC,或者GenerativeAI)的兴趣飙升,而LLM表现出的卓越的泛化能力,也被视为实现通用人工智能(ArtificialGeneralIntelligence,AGI)的潜在希......
  • RenderBufferLoadAction, RenderBufferStoreAction
    什么地方用到? CommandBuffer的SetRenderTarget(renderTargetId, loadAction,storeAction)函数 RenderBufferLoadAction 用个例子说明:有两个RenderTexture A和B,在A上绘制一个红色三角形->在B上绘制一个蓝色矩形-> 在A上绘制一个黄色菱形RenderBufferLoadAction.L......
  • emby/jellyfin笔记记录
    dockerpulllovechen/embyserverdockerrun--nameemby-d--nethost--envUID=0--envGID=0--envGIDLIST=0--device=/dev/dri:/dev/drilovechen/embyserver:latest/path/to/media是我们的媒体文件所在的路径,将被映射到容器中的/media目录。/path/to/config是Jel......
  • RT-DETR学习笔记(1)
    视频教程:RT-DETR|2、backbone_哔哩哔哩_bilibili 一、图像预处理经过图像预处理、图像增强后的图片尺寸都为640*640超参数multi_scale设置了不同的尺寸sz是经过对multi-scale随机选择得到的一个尺寸,这里假设是576则640*640图像会通过双线性插值(interpolate)方法resize到576*......
  • 关于VS Code崩溃提示‘-1247483645‘的解决方案 - 随笔记录
    今天开机运行VSCode时偶然发现它总是无法正常运行,提示框中报错的内容有这么一条:thewindowterminatedunexpectedly(reason:'crashed',code:'-1247483645')上网查找并尝试了很多网友的解决方案,彻底删除后重装或是使用网页版取代等等,但都不能很好地解决这个问题,最后测试为VSC......
  • 《程序员修炼之道:从小工到专家》读书笔记——4
    培养良好的开发习惯成为专家程序员不仅仅依赖于技术能力,还需要养成良好的开发习惯。良好的开发习惯不仅能提高开发效率,还能保证代码质量,减少错误发生的可能性。专家程序员通常在开发过程中保持高度的规范性和系统性,遵循最佳实践,不断优化自己的开发流程,做到更好。首先,专家程序员......
  • 《程序员修炼之道:从小工到专家》读书笔记——6
    代码审查与团队协作在软件开发过程中,代码审查是一项至关重要的活动。它不仅可以提高代码质量,发现潜在的错误,还能够促进团队成员之间的技术交流和学习。对于程序员来说,进行有效的代码审查,不仅是对自己代码的验证,也是提高整体团队技术水平的一种方式。专家程序员通常非常重视代码......
  • 《程序员修炼之道:从小工到专家》读书笔记——5
    有效沟通和团队协作成为一个技术专家,不仅需要技术能力的提升,还需要具备良好的沟通和团队协作能力。大多数项目都是团队合作的成果,专家程序员通常在团队中起到核心作用,通过有效沟通协调各方,推动项目的顺利进行。首先,专家程序员要具备良好的表达能力和沟通技巧。他们能够清晰地阐......