本文细节讲解较少,主要是介绍如何使用,关于参数和格式以及函数很多博客有写,可是很少有人介绍 编译使用的过程,因此写下本文,以帮助刚入门小伙伴的快速使用。
1.protobuf介绍
**
protobuf(Protocol Buffers )是Google的开源项目,是Google的中立于语言、平台,可扩展的用于序列化结构化数据的解决方案。用来对数据进行序列化和反序列化。
protobuf支持目前主流的开发语言,包括C++、Java、Python、Objective-C、C#、JavaNano、JavaScript、Ruby、Go、PHP等。只要你使用以上语言,都可以用protobuf来序列化和反序列化你的数据。
数据的序列化和反序列化
序列化 (Serialization):将数据结构或对象转换成二进制串的过程。
反序列化(Deserialization):将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。
protobuf相对而言效率应该是最高的,不管是安装效率还是使用效率,protobuf都很高效,而且protobuf不仅用于C++序列化,还可用于Java和Python的序列化,使用范围很广。
关于ProtoBuf示例代码包含在源代码包中的“examples”目录下。
ProtoBuf数据类型
首先看一下ProtoBuf支持的数据类型。protobuf属于轻量级的,因此不能支持太多的数据类型,下面是protobuf支持的基本类型列表,一般都能满足需求,不过在选择方案之前,还是先看看是否都能支持,以免前功尽弃。同样该表也值得收藏,作为我们在定义类型时做参考。
2ProtoBuf使用步骤
安装请参考其他博客,或者SLAM专栏的Cartographer编译安装部分,有protobuf安装过程,基本上都是很简单,也很少有问题。
知道了ProtoBuf的作用与支持的数据类型。我么需要知道ProtoBuf使用的一般步骤,下面以C++中使用ProtoBuf为例来描述使用的一般步骤。
第一步:定义proto文件,文件的内容就是定义我们需要存储或者传输的数据结构,也就是定义我们自己的数据存储或者传输的协议。
定义传输文件的格式
syntax="proto3";
package todo;
message Task{
string text=1;
bool done=2;
}
第二步:编译安装protocol buffer编译器来编译自定义的.proto文件,用于生成.pb.h文件(proto文件中自定义类的头文件)和 .pb.cc(proto文件中自定义类的实现文件)。
使用proto自带的编译器进行编译,可以生成一个.h 和一个.cc文件
protoc --cpp_out . todo.proto
第三步: 使用protoco buffer的C++ API来读写消息。
这里使用CMakeLIst进行编译和库连接,比较方便主要是。
cmake_minimum_required(VERSION 2.8.0)
project(test)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE debug)
find_package(Protobuf 3.0.0 REQUIRED)
find_package(Threads REQUIRED)
add_executable(main test.cpp todo.pb.cc)
target_link_libraries(main ${PROTOBUF_LIBRARY} Threads::Threads)
随便写一个程序看下是否能正确运行。
#include<iostream>
#include<string>
#include "todo.pb.h"
using namespace std;
int main()
{
GOOGLE_PROTOBUF_VERIFY_VERSION;
todo::Task task;
task.set_text("luhuidong");
task.set_done(true);
cout<<"test";
return 0;
}
本文主要是使用方法的介绍,其余复杂的解释请参考下面的参考连接。
关于proto文件的使用和生成的头文件与源文件解析,官网有解释不再赘述!了解更多,参考以下链接!!!
参考:
Language Guide | Protocol Buffers | Google Developers
Protocol Buffers C++入门教程_GoldBaby_的博客-CSDN博客