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在之前的文章中已经简单的介绍过了,这里就不 ...
随机推荐
- Badboy录制Jmter脚本
提纲 1.特性和用途 2.下载和安装 3.界面介绍 4.录制脚本(注意:badboy默认是打开就开始录制,需要在step双击后进行取消默认设置) 5.添加断言(参数化设置,注意:badboy默认只运行 ...
- sql语句start with connect by prior语法解析
prior分两种放法: 1 放在子节点端 表示start with 指定的节点作为根节点,按照从上到下的顺序遍历 2 放在父节点端 表示start with指定的节点作为最底层节点,按照从下到上的顺序 ...
- 前端之HTML(一)
最近学到前端的一些知识,感觉挺有意思的.总结一下常用的知识.这些只是最简单的东西. 一 HTML,CSS,JS的关系 一个基本的网站包含很多网页,一个网页又有html,css,js组成. html 是 ...
- sqldeveloper 设置快捷
- spring框架加载完成后执行上下文刷新事件(ContextRefreshedEvent)
目前spring框架是j2ee比较常用的项目开发技术,只需在web.xml文件中进行少许配置即可,代码如下所示:<!--spring的配置文件--><context-param> ...
- linux 学习笔记 wc命令
#wc 文件名.txt 输出 4 13 65 文件名.txt -->4 行13个单词 #wc -w 文件名.txt 统计单词数量 #wc -l 文件名.txt 统计行数 #wc -c 文 ...
- 在windows上安装redis并设置密码
在windows上安装redis Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案. Redis从它的许多竞争继承来的三个主要特点: Redi ...
- Xamarin Essentials教程构建共享请求
Xamarin Essentials教程构建共享请求 共享请求类ShareTextRequest可以用于构建复杂形式的数据,用于向其他应用传输.例如,它可以指定共享内容的主题Subject,用于给邮件 ...
- UVA 814 The Letter Carrier's Rounds
大致翻译: 对于电子邮件应用程序,您需要描述发生在成对mta之间的基于smtp的通信.发送方 的用户代理向发送消息传输代理(MTA)提供格式化的消息.发送MTA使用SimpleMail 传输协议(SM ...
- Codeforces Round #538 (Div. 2)
目录 Codeforces 1114 A.Got Any Grapes? B.Yet Another Array Partitioning Task C.Trailing Loves (or L'oe ...