• 发文
  • 评论
  • 微博
  • 空间
  • 微信

Protobuf协议原理与应用

我秀中国 2017-11-22 15:26 发文

一、Protocol Buffer协议

protobuf协议是谷歌定义的一种跨平台、跨语言的结构化数据交换格式。类比于xml的文本格式,它可以提供二进制级数据交换服务,所以相比于前者,它的处理速度更快、资源消耗更小。它可以对各种数据流(文件、字符串等)轻松读写。该协议目前支持Java、Python和C++代码结构。

二、使用方法

1、首先根据需求定义消息文件(.proto)。定义方式类似于C++结构体,内部包含若干需要的属性字段。复杂一些的格式还可以使用嵌套定义。

2、由编译器生成指定语言的源文件(如指定C++,会分别生成对应的.pb.h和.pb.cc文件)。编译命令如下:

protoc -I = import_path --cpp_out = dst_dir import_path/file.proto

其中:protoc为protocol buffer提供的命令行编译器;-I选项用于指定待编译的proto文件所在目录;--cpp_out指定生成c++代码及路径(同样适用于python和java);最后参数指定proto文件路径。

3、将生成的文件(file.pb.h和file.pb.cc)拷贝到工程,加载后即可使用。

三、实践

1、下载protobuf源代码,按说明编译生成protoc和libprotobuf.so、libprotobuf-lite.so等文件,统一放在lib文件夹下。比较关键的是src文件夹,里面包含基本文 件定义,后面会用到。(一开始直接下载可执行文件免于再编译,后来使用时发现下载后只有protoc编译器,缺少动态库文件造成工程没法编译);

2、定义person.proto文件,如上图所示;

3、找到protoc所在目录,执行

protoc -I=/data/dev/ --cpp_out=/data/dev/ /data/dev/person.proto

生成person.pb.h、person.pb.cc文件;

4、在开发环境下构建C++项目,并将生成的两个文件拷贝到项目目录下。

5、配置项目包含目录,主要指src文件夹;配置依赖库,主要是libprotobuf-lite.so.9。

6、工程中包含person.pb.h,即可定义Person对象。

需要说明的是,编译器生成的.h和.cc文件包含了对.proto文件属性的setter和getter接口,以及读写二进制文件的SerializeToOstream及ParseFromIstream接口,这些接口均由编译器自动生成。不允许修改这两个文件。

声明:本文为OFweek维科号作者发布,不代表OFweek维科号立场。如有侵权或其他问题,请及时联系我们举报。
2
评论

评论

    相关阅读

    暂无数据

    我秀中国

    专业互联网地图平台,个性化的位置...

    举报文章问题

    ×
    • 营销广告
    • 重复、旧闻
    • 格式问题
    • 低俗
    • 标题夸张
    • 与事实不符
    • 疑似抄袭
    • 我有话要说
    确定 取消

    举报评论问题

    ×
    • 淫秽色情
    • 营销广告
    • 恶意攻击谩骂
    • 我要吐槽
    确定 取消

    用户登录×

    请输入用户名/手机/邮箱

    请输入密码