您的位置:首页 > Web前端

关于 Protocol Buffer 的简单运用

2012-05-14 18:19 302 查看
最近项目中,有使用到protobuf,但只是用来作为数据结构流保存数据到数据库,因此,只是用到及少部分内容
首先,需要创建一个后缀名为.proto的文件,暂定其名为test.proto,此文件是protobuf的预读文件.其格式为:

package RT;
message protoData
{
required uint32 playerid=1;
required string  name=2;
optional bool bNew=3;
message protoAttrValue
{
required uint32 attrtype=1;
required uint32 attrvalue=2;
}
repeated protoAttrValue m_mapAttrValue=4;
}

protobuf有一些关键字:

package //相当于namespace

message //相当于C++的struct关键字

required //表示此数据类型是必须的

optional //表示此数据类型是可选的

repeated //表示此数据是个不定长数组

之后,创建一个Generated文件夹用于放置转换为执行文件的protobuf文件

再写一个批处理程序命名为transfer.bat,其内容为

protoc --proto_path=.\ --cpp_out=.\Generated test.proto

pause

运行此批处理程序,在Generated文件下,将会出现两个文件,test.pb.cc和test.pb.h,这两个就是C++工程所需要的文件,将其引入工程,编译,之后在C++代码中就可以这样使用protobuf:

//设置数据
RT::protoData data;
data.set_playerid(5);
data.set_name("张三");
RT::protoData::protoAttrValue* pAttr = data.add_m_mapattrvalue();
pAttr->set_attrtype(2);
pAttr->set_attrvalue(4);
std::string protobuf;
data;.SerializeToString(&protobuf);//组成protobuf

//读取数据
RT::protoData data;
data.ParseFromString(protobuf);
int nId = data.playerid();
std::string name = data.name();
int nSize = data.m_mapattrvalue_size();
for ( int n=0; n<nSize; n++ )
{
const RT::protoAttrValue& attr = data.m_mapattrvalue(n);
int ntype = attr.attrtype();
int nvalue = attr.attrvalue();
}


其他相关文章链接: http://code.google.com/p/protobuf/
http://blog.csdn.net/ciml/article/details/5753367
http://www.jb51.net/article/33030.htm
https://developers.google.com/protocol-buffers/docs/proto?hl=zh-CN(官网)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐