热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

protobuf可变长度原理

这篇文章在你已经了解protobuf使用的基础上,更进一步的学习,如果不知道protobuf是什么?

这篇文章在你已经了解protobuf使用的基础上,更进一步的学习,如果不知道protobuf是什么?请查阅这篇文章 【golang-protobuf使用】

可变长度类型

官网说明地址: https://developers.google.com/protocol-buffers/docs/proto3

proto文件的可变长度类型有:int32、int64、uin32、uin64、sint32、sint64

连续位标识

Protobuf 用的是连续位标识技术,使用每个字节的第一位来标识是否需要继续向后读。每个字节低7位用于实际的编码。

举例:

本次举例使用uin32类型

十进制:300

二进制(4个字节):00000000 00000000 00000001 1000000

protobuf编码过程

  • 从二进制低字节(右边),开始7位分割 : 1100000 000000

  • 倒序: 0000000 1100000

  • 增加标识符位: 1 0000000 0 1100000

    1表示继续往后读取,0表示停止读取

所以最终编码结果为 1 0000000 0 1100000,这样将4字节存储大小转化为2字节存储大小

测试

目标:将10^32bit的二进制进行编码

proto文件格式

syntax = "proto3";
message Block {
    repeated  uint32 data = 1;
}

测试结果:

protobuf可变长度原理

总结

由测试结果可得如果高位(左边)字节为0,编码结果大小相应减少


以上所述就是小编给大家介绍的《protobuf可变长度原理》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 我们 的支持!


推荐阅读
  • 我正在尝试从官方的Google字体存储库中解析一个METADATA.pb文件,该文件可在以下位置找到: ... [详细]
  • egret protobufjs安装使用
    先安装好nodeprotobufjsgithub地址:https:github.comdcodeIOprotobuf.js#installation安装:npminstallprotobufjs-g安装全局protobufjsnpm ... [详细]
  • gRPC框架学习:2、ProtocolBuffers学习文章目录gRPC框架学习:2、ProtocolBuffers学习1.前言2.定义消息类型(1). ... [详细]
  • Google ProtoBuf的使用
    Google的protobuf太好用了,又小,读写又快跑步快慢受鞋的影响太大了,但是造鞋的工具研究起来还是很有难度的,百度 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • 本文介绍了使用Python编写购物程序的实现步骤和代码示例。程序启动后,用户需要输入工资,并打印商品列表。用户可以根据商品编号选择购买商品,程序会检测余额是否充足,如果充足则直接扣款,否则提醒用户。用户可以随时退出程序,在退出时打印已购买商品的数量和余额。附带了完整的代码示例。 ... [详细]
  • Windows下google/protobuf v3.9.1VS2017 x86 x64编译、使用
    Windows下googleprotobufv3.9.1--VS2017x86x64编译、使用,Go语言社区,Golang程序员人脉社 ... [详细]
  • golang基础-protobuf使用,Go语言社区,Golang程序员人脉社 ... [详细]
  • protobuf 安装_protobuf详解
    protobuf详解一、什么是protobufprotobuf全称GoogleProtocolBuffers,是google开发的的一套用于数据存储,网络通信时用于协议编解码的工具 ... [详细]
  • 学习gRPC1.工作原理是什么
    什么是gRPCgRPC已经成为实现需要大规模快速运行的分布式软件系统的一项重要技术。简而言之,gRPC是一个API框架,它允许一个程序在互联网上的一个位置传递数据到另一个位置的另一 ... [详细]
  • https:github.comprotocolbuffersprotobufreleases报错:Pleasespecifyeither:•ago_packag ... [详细]
author-avatar
mobiledu2502918113
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有