ProtoBuf 语法和编码原理入门

ProtoBuf 语法和编码原理入门 序列化是指将结构化数据转换成易于存储或发送的数据格式的过程,Protocol Buffer 简称 ProtoBuf,是一种语言无关,平台无关的序列化工具,由谷歌在 2008 年开源。相较于常见的序列化工具 XML, JSON, YAML, CSV 等,ProtoBuf 的优势主要包括序列化后数据量小,序列化和反序列化过程速度快,使用时只需定义 proto 文件使得其维护成本低,可向后兼容等;但因为其数据以二进制数据流的形式存在,也有人类不可读的劣势。 本文主要介绍 ProtoBuf 的使用方法,包括 .proto 文件的语法,以及如何使用 protoc 工具来生成不通语言的代码;以及其编码原理。 1 语法 首先从 https://github.com/protocolbuffers/protobuf 找到最新版本的 ProtoBuf,下载预编译好的二进制文件 protoc 解压到环境变量目录,本文使用的是 3.15.7 版本: $ protoc --version libprotoc 3.15.7 以一个简单的 proto 文件为例,它的语法和 C++ 类似: // msg.proto syntax = "proto3"; package Message; message SearchRequest { reserved 6, 9 to 12; reserved "foo", "bar"; string query = 1; int32 page_number = 2; int32 result_per_page = 3; } message ResultType { message Result { string url = 1; string title = 2; repeated string snippets = 3; } } message SearchResponse { repeated ResultType.Result results = 1; } 使用 protoc 工具生成指定语言的代码: ...

April 26, 2021 · 7 min