protobuf用法总结

protobuf是Google公司出的一个的序列化工具,用了一段时间,感觉很不错。
我主要将它用于程序相关的配置信息进行保存读取。
使用方法:

  1. 下载protobuf源码,编译生成相关的lib文件。下面给出我已经编译好的lib和头文件,并且包含一个生成头文件和源文件的批处理文件,使用起来十分方便;下载地址
  2. 编辑XXX.proto文件,将需要的结构体进行定义
package conf;
message IpStruct
{
    required string ipstr = 1;
}
message ConfigInfo
{
    optional int32 fsInst = 1;
    optional int32 trgOps_BR = 2;
    optional int32 trgOps_RP = 3;
    optional int32 recNum = 4;
    repeated IpStruct ipArray = 5;
}

下面是三个关键字的意思:required:一个格式良好的消息一定要含有1个这种字段。表示该值是必须要设置的;optional:消息格式中该字段可以有0个或1个值(不超过1个)。repeated:在一个格式良好的消息中,这种字段可以重复任意多次(包括0次)。重复的值的顺序会被保留。
3. 编辑完.proto文件以后,运行批处理,会生成一个.h和.cc文件,如果proto文件编写的有语法错误,就不会生成,批处理中会有错误提示。
4. 在使用的工程中添加生成的.h和.cc文件,包含头文件和lib文件。就可以使用protobuf了。

conf::ConfigInfo *m_pConfigInfo = new conf::ConfigInfo;
m_pConfigInfo->set_fsinst(6); //设置值
m_pConfigInfo->fsinst(); //读取值
//列表数据的添加
conf::IpStruct *ipStru = m_pConfigInfo->add_iparray();
ipStru->set_ipstr("127.0.0.1");
//两种访问方式
conf::IpStruct *pIpStru = pConfInfo->mutable_iparray(i);
conf::IpStruct ipStru = pConfInfo->iparray(i);
//读取本地文件
string filePath = "xxx.conf";
ifstream ifs(filePath,ios::binary);
if (ifs.is_open())
{
if (!m_pConfigInfo->ParsePartialFromIstream(&ifs))
{
return false;
}
ifs.close();
}
//保存到本地
bool bInited = m_pConfigInfo->IsInitialized();//检查有没有初始化,这个很重要,如果有些量没有初始化,会保存出错
string filePath = "xxx.conf";
ofstream ofs(filePath,ios::binary);
if (ifs.is_open())
{
if (!m_pConfigInfo->SerializeToOstream(&ofs))
{
return false;
}
ofs.close();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值