首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

巧用 Protobuf 反射来优化代码,拒做 PB Boy

通过Reflection来操作FieldDescriptor,从而动态获取或修改单个字段 获取 Descript、Reflection 函数: const google::protobuf::Reflection...->GetDescriptor(); 获取 FieldDescriptor 函数: const google::protobuf::FieldDescriptor * pFieldDesc = pDescriptor...类 FieldDescriptor 中还有一个支持扩展函数,函数如下: // Get the FieldOptions for this field.  .../protobuf/descriptor.h> #include  std::string strRegex = FieldDescriptor-...对于某些运营系统来说,其希望能够快速接入一些数据,传统开发常常会面临如下问题: 如何在不增加或变更表结构基础上,如何快速接入数据? 如何零开发实现频繁添加字段、新增渠道等需求?

2.4K30

Protobuf了解一下?

Protocol Buffers是Google公司开发一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。它不依赖于语言和平台并且可扩展性极强。...现阶段官方支持C++、JAVA、Python等编程语言,但可以找到大量几乎涵盖所有语言第三方拓展包。 Protocol Buffers经常被简称为protobuf。 ?...(图文无关,就是想纪念一下消失巴黎圣母院) 项目GitHub地址: https://github.com/google/protobuf 为什么要使用protobuf?...(高效) 3、它可以将数据序列化为XML,可以与不同种类项目进行共享数据,一般在软硬件交互,游戏开发等情况下使用。(应用广泛) 如何使用protocolbuf?...所以,之后想要使用protobuf,就可以在proto文件中创建类似python字典形式数据,之后再使用: protoc --python_out=输出路径 proto文件路径即可 这就是protobuf

91120
您找到你想要的搜索结果了吗?
是的
没有找到

IM通讯协议专题学习(八):金蝶随手记团队Protobuf应用实践(原理篇)

《IM通讯协议专题学习(六):手把手教你如何在Android上零使用Protobuf》(稍后发布..)...《IM通讯协议专题学习(七):手把手教你如何在NodeJS中零使用Protobuf》《IM通讯协议专题学习(八):金蝶随手记团队Protobuf应用实践(原理篇)》(* 本文)《IM通讯协议专题学习...陈硕文章《一种自动反射消息类型 Google Protobuf 网络传输方案》中对 GPB 反射机制做了详细分析和源码解读。...protobuf Message types;2)MessageFactory 能创建程序编译时候所链接全部 protobuf Message types。...[5] 如何选择即时通讯应用数据传输格式[7] 强列建议将Protobuf作为你即时通讯应用数据传输格式[8] APP与后台通信数据格式演进:文本协议到二进制协议[9] 面试必考,史上最通俗大小端字节序详解

56720

通讯协议序列化解读(一) Protobuf详解教程

emmm,算是吧,但是也不全是,先给大家说下protobuf吧。 protobuf:谷歌公司出一款开源项目,性能好,效率高,并且支持多种语言,例如:java,C++,python等。     ...二、protobuf详解 在使用protobuf之前,需要安装protobuf编译器和运行时环境。 由于protobuf是跨平台,跨语言,所以需要下载和安装对应版本编译器和运行时依赖。...-- protobuf-谷歌 --> com.google.protobuf protobuf-java.../protobuf/releases 选择对应系统版本,下载后解压。...在实际操作中存在问题 protobuf主要用于与前端通信编解码,那么在后台收到二进制如何存入到数据库中呢,或者说数据库中取得数据怎么映射到protobean呢。

1.8K70

通讯协议序列化解读(一) Protobuf详解教程

kryo就是一款快速、高效序列化框架,但是它不是我们今天主角,因为他只能在java中使用,和前端非java语言通讯就存在极大隔阂。我们今天主角是protobuf?...emmm,算是吧,但是也不全是,先给大家说下protobuf吧。 protobuf:谷歌公司出一款开源项目,性能好,效率高,并且支持多种语言,例如:java,C++,python等。     ...二、protobuf详解 在使用protobuf之前,需要安装protobuf编译器和运行时环境。 由于protobuf是跨平台,跨语言,所以需要下载和安装对应版本编译器和运行时依赖。...-- protobuf-谷歌 --> com.google.protobuf protobuf-java...在实际操作中存在问题 protobuf主要用于与前端通信编解码,那么在后台收到二进制如何存入到数据库中呢,或者说数据库中取得数据怎么映射到protobean呢。

79710

通讯协议序列化解读(一) Protobuf详解教程

kryo就是一款快速、高效序列化框架,但是它不是我们今天主角,因为他只能在java中使用,和前端非java语言通讯就存在极大隔阂。我们今天主角是protobuf?...emmm,算是吧,但是也不全是,先给大家说下protobuf吧。 protobuf:谷歌公司出一款开源项目,性能好,效率高,并且支持多种语言,例如:java,C++,python等。     ...二、protobuf详解 在使用protobuf之前,需要安装protobuf编译器和运行时环境。 由于protobuf是跨平台,跨语言,所以需要下载和安装对应版本编译器和运行时依赖。...-- protobuf-谷歌 --> com.google.protobuf protobuf-java...在实际操作中存在问题 protobuf主要用于与前端通信编解码,那么在后台收到二进制如何存入到数据库中呢,或者说数据库中取得数据怎么映射到protobean呢。

66240

Google Protocol Buffer 使用和原理

可用于通讯协议、数据存储等领域语言无关、平台无关、可扩展序列化结构数据格式。目前提供了 C++、Java、Python 三种语言 API。...Total Time 指一个对象操作整个时间,包括创建对象,将对象序列化为内存中字节序列,然后再反序列化整个过程。...测试结果可以看到 Protobuf 成绩很好,感兴趣读者可以自行到网站 http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking...编写新 proto 编译器 随 Google Protocol Buffer 源代码一起发布编译器 protoc 支持 3 种编程语言:C++,java 和 Python。...大于 128 数字,比如 300,会用两个字节来表示:1010 1100 0000 0010 下图演示了 Google Protocol Buffer 如何解析两个 bytes。

1.9K30

protocol buffer开发指南

ProtoBuf 是一套接口描述语言(IDL)和相关工具集(主要是 protoc,基于 C++ 实现),类似 Apache Thrift)。...用户写好 .proto 描述文件,之后使用 protoc 可以很容易编译成众多计算机语言(C++、Java、Python、C#、Golang 等)接口代码。...protocol buffer预留了19000~19999(FieldDescriptor::kFirstReservedNumber ~ FieldDescriptor::kLastReservedNumber...需要注意是,客户端解码message时可能会给出不同解释,如未识别的proto3 enum类型会保存在message中,但如何解释则依赖于解码语言。...oneof   oneof类似C语言联合体union,oneof中不能使用repeated option   所有有效选项都定义在google/protobuf/descriptor.proto,参见

79930

Protobuf 语法指南

最小标识号可以1开始,最大到2^29 - 1, or 536,870,911。不可以使用其中[19000-19999]标识号, Protobuf协议实现中对这些进行了预留。...例如,下面是如何C++中设置bar值: Foo foo; foo.SetExtension(bar, 15); 类似地,Foo类也定义了模板函数 HasExtension(),ClearExtension...C++代码 如下所示: using google::protobuf; protobuf::RpcChannel* channel; protobuf::RpcController* controller...该功能应该属于一个高级特性,对于大部分人是用不到。由于options是定在 google/protobuf/descriptor.proto中,因此你可以在该文件中进行扩展,定义自己选项。...可以通过protobuf-global-extension-registry@google.com来获取全局唯一标识号。只需提供你项目名和项目网站. 通常你只需要一个扩展号。

4K20

nio与netty编程(二)

NioEventLoop 内部采用串行化设计,消息读取->解码->处理->编码->发送,始终由 IO 线程 NioEventLoop 负责。...这使得链式操作简单、高效, 并有利于编写可重用、通用代码。Netty 框架目标就是让你业务逻辑网络基础应用编码中分离出来、解脱出来。...Google Protobuf ProtobufGoogle 发布开源项目,全称 Google Protocol Buffers,特点如下: 支持跨平台、多语言(支持目前绝大多数语言,...例如 C++、C#、Java、python 等) 高性能,高可靠性 使用 protobuf 编译器能自动生成代码,Protobuf 是将类定义使用.proto 文件进行描述, 然后通过 protoc.exe...(field, index, value); } @Override public Builder addRepeatedField( com.google.protobuf.Descriptors.FieldDescriptor

39210

protocol buffers 序列化数据

只需使用 Protobuf 对数据结构进行一次描述,即可利用各种不同语言或各种不同数据流中对你结构化数据轻松读写。 Protocol buffers 很适合做数据存储或 RPC 数据交换格式。...可用于通讯协议、数据存储等领域语言无关、平台无关、可扩展序列化结构数据格式 二. 为什么要发明 protocol buffers ? ?...proto2 和 proto3 名字看起来有点扑朔迷离,那是因为当我们最初开源 protocol buffers 时,它实际上是 Google 第二个版本了,所以被称为 proto2,这也是我们开源版本号...另外在反序列化过程中,无法被识别的枚举值,将会被保留在 messaage 中。因为消息反序列化时如何表示是依赖于语言。...同样,由新代码创建消息可以由旧代码解析:旧二进制文件在解析时会简单地忽略新字段。(具体原因见 未知字段 这一章节) 3.只要字段号在更新消息类型中不再使用,字段可以被删除。

1.1K30

这是一份很有诚意 Protocol Buffer 语法详解

由于 Google出品,我相信Protocol Buffer已经具备足够吸引力 今天,我将详细介绍Protocol Buffer 语法 & 如何去构建Protocol Buffer 消息模型...buffer 类型名称解析与 C++ 一致: 最内部 开始查找,依次 向外 进行 每个包会被看作是其父类包内部类 Protocol buffer 编译器会解析 .proto文件中定义所有类型名...: 对 Java 或 C++来说,将有一个对应 enum 文件 对 Python 来说,有一个特殊EnumDescriptor 类 被用来在运行时生成类中创建一系列整型值符号常量(symbolic...,否则会导致数据不一致;可以通过为新项目定义一个可扩展标识号规则来防止该情况发生 } 要访问 扩展字段 方法与 访问普通字段 不同:使用专门扩展访问函数 实例: // 如何C++中设置 bar...总结 看完本文,你应该非常了解Protocol Buffer 语法 & 如何去构建Protocol Buffer 消息模型 关于Protocol Buffer 系类文章如下: 快来看看Google

1.3K40

Carson带你学序列化:这是一份很有诚意 Protocol Buffer 语法详解

由于 Google出品,我相信Protocol Buffer已经具备足够吸引力 今天,我将详细介绍Protocol Buffer 语法 & 如何去构建Protocol Buffer 消息模型 Carson...带你学序列化Protocol Buffer系列文章 快来看看Google出品Protocol Buffer,别只会用Json和XML了 Carson带你学序列化:手把手教你如何安装Protocol...: Protocol buffer 类型名称解析与 C++ 一致: 最内部 开始查找,依次 向外 进行 每个包会被看作是其父类包内部类 Protocol buffer 编译器会解析...对 Java 或 C++来说,将有一个对应 enum 文件 对 Python 来说,有一个特殊EnumDescriptor 类 被用来在运行时生成类中创建一系列整型值符号常量(symbolic...,否则会导致数据不一致;可以通过为新项目定义一个可扩展标识号规则来防止该情况发生 } 要访问 扩展字段 方法与 访问普通字段 不同:使用专门扩展访问函数 实例: // 如何C++中设置 bar

73760

基于protobuf代码生成

于是我们自己写了 protoc 插件去给生成C++代码插入对 fmt.dev 支持。...::protobuf::FieldDescriptor* field) { std::string result = field->lowercase_name(); if...所以为了简单起见我们第一步是把pb读进来以后创建出第一个符号库集合,然后把它和官方和我们工具自带符号库整合,再执行一次构建符号库。这样第二次构建时候就可以直接使用在同一个pb文件里插件数据了。...所以后来我优化了下流程,允许代码生成工具去 YAML 里读取多个服务多个生成规则。整个流程里增加了一步,提供了接口把多种类型服务声明整合到一个YAML配置文件里。...) {}; } 上面的 option 里部分其实就是针对特定类型服务接入层自定义扩展机制。

78030
领券