Protobuf,从入门到穿拖鞋

本文介绍了Google Protocol Buffer(Protobuf)的基础知识,包括其概念、优势、安装过程,并详细讲解了如何编写proto文件、使用protoc编译器生成C++代码、理解编码规则以及适用场景。Protobuf是一种高效的数据存储和通信协议,适用于处理结构化数据,具有平台无关、语言无关、可扩展性等优点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从公司的项目源码中看到了这个东西,觉得挺好用的,特为大家总结。下面的操作以C++为编程语言,protoc的版本为libprotoc 3.2.0。


一、Protobuf 概述


1. Protocol是什么?

Google Protocol Buffer(简称 Protobuf)是一种轻便高效的结构化数据存储格式,平台无关、语言无关、可扩展,可用于通讯协议和数据存储等领域。


2. 为什么要用Protocol

- 平台无关,语言无关,可扩展;
- 提供了友好的动态库,使用简单;
- 解析速度快,比对应的XML快约20-100倍;
- 序列化数据非常简洁、紧凑,与XML相比,其序列化之后的数据量约为1/3到1/10。


3. 怎么安装Protocol

源码下载地址: 

https://github.com/google/protobuf 
安装依赖的库:

autoconf automake libtool curl make g++ unzip 

安装:


$ ./autogen.sh
$ ./configure
$ make
$ make check$ sudo make install

二、Protobuf 怎么用?


1. 编写proto文件

首先需要一个proto文件,其中定义了我们程序中需要处理的结构化数据:


// Filename: addressbook.proto

syntax="proto2";
package addressbook;

import
"src/help.proto";      //举例用,编译时去掉
message Person {    
   required string name = 1;    
   required int32 id = 2;    
   optional string email = 3;    
   enum PhoneType {        MOBILE = 0;        HOME = 1;        WORK = 2;    }    
   message PhoneNumber {
       required string number = 1;        
       optional PhoneType type = 2 [default = HOME];    }    
   repeated PhoneNumber phone = 4; }

message AddressBook {
   repeated Person person_info = 1; }


2. 代码解释

 // Filename: addressbook.proto 这一行是注释,语法类似于C++。
 syntax="proto2"; 表明使用protobuf的编译器版本为v2,目前最新的版本为v3。
 package addressbook; 声明了一个包名,用来防止不同的消息类型命名冲突,类似于 namespace 。
 import "src/help.proto" 导入了一个外部proto文件中的定义,类似于C++中的 include 。不过好像只能import当前目录及当前目录的子目录中的proto文件,比如import父目录中的文件时编译会报错(Import "../xxxx.proto" was not found or had errors.),使用绝对路径也不行,尚不清楚原因,官方文档说使用 -I=PATH 或者 --proto_path=PATH&nbs

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值