protobuf的简单使用
操作系统 : CentOS7.3.1611_x64
gcc版本 :4.8.5
go 版本 : go1.8.3 linux/amd64
Python 版本 : 2.7.5
libprotoc : 2.5.0
Protobuf是Google开发一种数据描述语言,能够将结构化数据序列化,可用于数据存储、通信协议等方面。
首页: https://developers.google.com/protocol-buffers/
文档: https://developers.google.com/protocol-buffers/docs/overview
github地址: https://github.com/google/protobuf
这里记录了C++、Go和Python语言的简单使用示例,更多内容请参考官网手册。
准备工作
安装protobuf:
yum install protobuf protobuf-compiler protobuf-c-devel protobuf-devel
写proto文件(addr.book.proto):
package addr;
message book
{
required int32 id = ;
required string str = ;
optional int32 opt = ;
}
C++示例
写文件操作(writer.cpp):
https://github.com/mike-zhang/cppExamples/blob/master/protobufOpt/example1/writer.cpp
读文件操作(reader.cpp):
https://github.com/mike-zhang/cppExamples/blob/master/protobufOpt/example1/reader.cpp
Makefile文件:
CC = g++
CFLAGS = -g -O2 -Wall
SRC_DIR=.
DST_DIR=libs all:
make genproto
make writer
make reader genproto:
mkdir -p $(DST_DIR)
protoc -I=$(SRC_DIR) --cpp_out=$(DST_DIR) addr.book.proto writer:
$(CC) -o writer writer.cpp $(DST_DIR)/addr.book.pb.cc -I$(DST_DIR) -lprotobuf reader:
$(CC) -o reader reader.cpp $(DST_DIR)/addr.book.pb.cc -I$(DST_DIR) -lprotobuf clean:
rm -rf $(DST_DIR)
rm -f writer reader log
rm -f *.o
运行效果:
[root@localhost proto1]# ./writer
[root@localhost proto1]# ./reader book1
[root@localhost proto1]#
Go示例代码
安装goprotobuf:
yum install golang-googlecode-goprotobuf.x86_64
将proto文件转换为go代码(genPbCode.sh):
#! /bin/sh mkdir -p src/addr
protoc -I=. --go_out=src/addr addr.book.proto
修改protobuf路径:
vi src/addr/addr.book.pb.go import proto "code.google.com/p/goprotobuf/proto" 修改为: import proto "github.com/golang/protobuf/proto"
添加PATH(临时使用时可以这么操作):
export GOPATH=$GOPATH:$PWD
写文件操作(write.go):
https://github.com/mike-zhang/goExamples/blob/master/protobufOpt/protoTest1/write.go
读文件操作(reader.go):
https://github.com/mike-zhang/goExamples/blob/master/protobufOpt/protoTest1/read.go
运行效果:
[root@localhost proto3]# go run write.go
[root@localhost proto3]# go run read.go
id: str:"testMsg11"
[root@localhost proto3]#
Python示例
需要安装protobuf包:
pip install protobuf
将proto文件转换为python代码(genPbCode.sh):
#! /bin/sh protoc -I=. --python_out=. addr.book.proto
touch addr/__init__.py
写文件操作(write.py):
https://github.com/mike-zhang/pyExamples/blob/master/protobufOpt/example1/write.py
读文件操作(reader.py):
https://github.com/mike-zhang/pyExamples/blob/master/protobufOpt/example1/reader.py
运行效果:
(py27env) [root@localhost proto2]# ./genPbCode.sh
(py27env) [root@localhost proto2]# python write.py
(py27env) [root@localhost proto2]# python reader.py
id:
str: "testMsg1" (py27env) [root@localhost proto2]#
好,就这些了,希望对你有帮助。
本文github地址:
https://github.com/mike-zhang/mikeBlogEssays/blob/master/2018/20180201_protobuf的简单使用.rst
欢迎补充
protobuf的简单使用的更多相关文章
- Protobuf的简单介绍、使用和分析
Protobuf的简单介绍.使用和分析 一.protobuf是什么? protobuf(Google Protocol Buffers)是Google提供一个具有高效的协议数据交换格式工具库( ...
- Centos6.5下安装protobuf及简单使用
1.protobuf是google公司提出的数据存储格式,详细介绍可以参考:https://code.google.com/p/protobuf/ 2.下载最新的protobuf,下载地址:https ...
- Centos6.4下安装protobuf及简单使用
1.protobuf是google公司提出的数据存储格式,详细介绍可以参考:https://code.google.com/p/protobuf/ 2.下载最新的protobuf,下载地址:https ...
- .NET序列化工具Jil、Json.NET和Protobuf的简单测评
前一段时间逛园子的时候发现有人比较了Jil.Json.NET和Protobuf的性能,一时好奇,也做了个测试,这里记录下来,以供查阅. 前期准备 依赖类库的话,可以通过Nuget在公共组件库总下载,这 ...
- Unity手游之路<一>C#版本Protobuf
http://blog.csdn.net/janeky/article/details/17104877 个游戏包含了各种数据,包括本地数据和与服务端通信的数据.今天我们来谈谈如何存储数据,以及客户端 ...
- (转)RabbitMQ消息队列的小伙伴: ProtoBuf(Google Protocol Buffer)
什么是ProtoBuf? 一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化.它很适合做数据存储或 RPC 数据交换格式.可用于通讯协议.数据存储等领域的语言无关.平台无关.可扩 ...
- protobuf 中的嵌套消息的使用
protobuf的简单的使用,不过还留下了一个问题,那就是之前主要介绍的都是对简单数据的赋值,简单数据直接采用set_xx()即可,但是如果不是简单变量而是自定义的复合类型变量,就没有简单的set函数 ...
- RabbitMQ消息队列的小伙伴: ProtoBuf(Google Protocol Buffer)
什么是ProtoBuf? 一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化.它很适合做数据存储或 RPC 数据交换格式.可用于通讯协议.数据存储等领域的语言无关.平台无关.可扩 ...
- SpringBoot整合Netty并使用Protobuf进行数据传输(附工程)
前言 本篇文章主要介绍的是SpringBoot整合Netty以及使用Protobuf进行数据传输的相关内容.Protobuf会简单的介绍下用法,至于Netty在之前的文章中已经简单的介绍过了,这里就不 ...
随机推荐
- P1026 统计单词个数 区间dp
题目描述 给出一个长度不超过200200的由小写英文字母组成的字母串(约定;该字串以每行2020个字母的方式输入,且保证每行一定为2020个).要求将此字母串分成kk份(1<k \le 401& ...
- 关系网络数据可视化:3. 案例:公司职员关系图表 & 导演演员关系网络可视化
1. 公司职员关系图表 节点和边界数据 节点是指每个节点本身的数据,代表公司职工的名称:属性(Country).分类(Category)和地区(Region,给每个节点定义的属性数据).文件必须是.c ...
- day 42 mycql 查询操作,重点中的重点
数据库的查询操作是重点中的重点,最核心的内容就是它! 在查询时关键字的定义顺序: select distinct(select-list) from (left-table) (type-join) ...
- java.io.File中字段的使用
File.pathSeparator指的是分隔连续多个路径字符串的分隔符,例如:Java -cp test.jar;abc.jar HelloWorld就是指“;” File.separa ...
- Fire! -两次dfs
题目描述: Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and the owner of ...
- 【JavaScript】underscore
例: 'use strict'; _.map([1, 2, 3], (x) => x * x); // [1, 4, 9] No1: [every/some] 当集合的所有元素都满足条件时,_. ...
- Python多重继承顺序---C3算法
什么是多重继承C3算法 MRO即 method resolution order (方法解释顺序),主要用于在多继承时判断属性的路径(来自于哪个类). 在python2.2版本中,算法基本思想是根据每 ...
- elf 学习
现在我们使用 readelf 命令来查看 elfDome.out 的文件头 readelf -l elfDemo.out 使用 readelf 来查看程序头: readelf -S elfDemo.o ...
- 学生成绩管理系统C++
今天晚上终于做完了学生成绩管理系统!激动!开心!!!哈哈哈~~~~ 总共298行代码,第一次写这么多. 其中遇到了好多困难,也烦恼了好久,不过最终都解决了! 做了之后果然,满满的成就感!抑制不住的兴奋 ...
- Codeforces Round #530 (Div. 2)
RANK :2252 题数 :3 补题: D - Sum in the tree 思路:贪心 把权值放在祖先节点上 ,预处理 每个节点保存 他与他儿子中 权值最小值即可. 最后会有一些叶子节点依旧为 ...