Protocol Buffers十分钟上手:入门示例
时间:2022-06-06
本文章向大家介绍Protocol Buffers十分钟上手:入门示例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.简介
Protocol Buffers是Google出品并开源的语言和平台均中立的数据序列化和反序列化工具,官方支持C++/Java和Python三大语言,另外有大量的第三方实现支持PHP、D语言和C#等众多语言,这些都可以从Google Protocol Buffers的官方网站上找到链接。
2.安装Protocol Buffers工具
从http://code.google.com/p/protobuf/downloads/list上下载protobuf安装包,使用的是automake安装方式。安装成功后,将它的bin和lib目录分别加入到PATH和LD_LIBRARY_PATH环境变量,以方便直接调用。
3.编写接口文件
Protocol Buffers的接口文件以.proto为文件名的后缀,作用和语法都类似于Corba和MS COM的IDL,如果有这方面的基础,理解和使用起来会容易许多。x.proto文件的内容如下:
package x;
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
4.编译接口文件
调用protoc编译器进行编译:protoc x.proto --cpp_out=./oo,请注意需要指出输出文件,C++语言使用--cpp_out指出,其它语言可以查看帮助protoc --help,输出目录oo是必须事先创建好的,否则会报输出目录下存在。
编译成功后,将在oo目录下生成供应用调用的文件x.pb.h和x.pb.cc,编译自己代码的时候应当将x.pb.cc包含进去。
5.编写测试程序
测试程序x.cpp的内容如下:
#include "oo/x.pb.h"
int main()
{
using namespace x;
Person p;
p.set_name("tom");
p.set_id(88);
p.set_email("xx@xx.com");
std::string str;
p.SerializeToString(&str); // 将对象序列化到字符串,除此外还可以序列化到fstream等
printf("%sn", str.c_str());
Person x;
x.ParseFromString(str); // 从字符串反序列化
printf("x.name=%sn", x.name().c_str()); // 这里的输出将是tom,说明反序列化正确
return 0;
}
6.编译测试程序
g++ -g -o x x.cpp ./oo/x.pb.cc -I. -I/usr/local/protobuf/include -L/usr/local/protobuf/lib -lprotobuf -pthread
7.运行测试程序
./x
tomX xx@xx.com
更多讨论请上: http://bbs.hadoopor.com/thread-1837-1-1.html
- 如约而至,Java 10 正式发布!
- Intellij IDEA查看所有断点
- Spring Boot国际化支持
- 有记忆会推理的可微分神经计算机,DeepMind现在开源了代码
- Spring Boot整合Thymeleaf模板引擎
- Spring Boot实现热部署
- Java中的宏变量,宏替换详解。
- 类、变量、块、构造器、继承初始化顺序,终极解答。
- Spring Boot Debug调试
- Maven精选系列--classifier元素妙用
- PostgreSQL里面的一些命令小结
- Java中创建String的两道面试题及详解
- PostgreSQL主备环境搭建
- Tomcat集群session复制与Oracle的坑。。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PySpark——开启大数据分析师之路
- 一款直击痛点的优秀http框架,让我超高效率完成了和第三方接口的对接
- 强连通和连通算法在关联图谱中的应用
- PySpark SQL——SQL和pd.DataFrame的结合体
- 初识Kubernetes及快速安装
- 使用k8s部署springboot+redis简单应用
- React Ref 使用总结
- Python人脸识别—我的眼里只有你
- 函数式编程是如何提升代码的扩展性
- 浏览器中的跨域问题与 CORS
- 微信小程序怎么做链接可以链到小程序的其它页面。
- 如何实现一个 3D 效果的魔方
- FlutterDojo设计之道—状态管理之路(三)
- 微信头像加国旗
- FlutterDojo设计之道—状态管理之路(四)