首先我认为这个文章的读者应该是已经知道protobuff 是什么东西 该怎么用,为什么用,也就是 what how why。如果你真的不知道,可以先去搜索引擎上读几篇他的介绍,如果可以翻墙去谷歌上读读英文文章更好。了解完protobuff后下来我就来点干货,也就是protobuff在网络传输中序列化和反序列的使用。虽然是一个很简单的例子,但是希望你可以从中找到入门开始使用protobuff的灵感。那么我们开始吧。。。。。。
直接上代码: 我这里是使用c++进行例子的编写,其实protobuff也支持java和python 原理雷同,这里就不写了
首先是msg.proto
package demo;
message msg
{
required int32 msgtype=1;
required string msginfo=2;
required string msgfrom=3;
optional string opt=4; //can select
}
之后我们 protoc --cpp_out=. msg.proto
使用protoc 编译器生成对应的msg.pb.h和msg.pb.cc文件
下来我们就要编写自己的代码了:
protobuff_demo.cc文件
#include"msg.pb.h"
#include<iostream>
#include<string>
using namespace std;
int main(int argc,char *argv[])
{
demo::msg writer;
writer.set_msgtype(1);
writer.set_msginfo("i am weeks");
writer.set_msgfrom("127.0.0.1");
//C++string序列化和序列化API
//客户端格式化信息
string in_data;
writer.SerializeToString(&in_data);
//下面用一个临时的string 表示在网络中进行传输的过程
//真是的过程中你可以借助相应的网络框架对数据进行传输
//客户端将数据放到网络上
string tmp=in_data;
//服务端从网络上拿数据
string out_data=tmp;
//服务端反格式化信息
demo::msg reader;
reader.ParseFromString(out_data);
cout<<"msg_type: "<<reader.msgtype()<<endl;
cout<<"msg_info: "<<reader.msginfo()<<endl;
cout<<"msg_from: "<<reader.msgfrom()<<endl;
return 0;
}
之后用g++将 msg.pb.cc文件 和protobuff_demo.cc文件生成一个可执行文件就可以了。
下来给大家一个链接是ProtoBuf 常用序列化/反序列化API
http://blog.csdn.net/sealyao/article/details/6940245