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
    评论
ProtobufProtocol Buffers)是一种轻量级的数据序列化格式,由Google开发。它可以用于结构化数据的序列化,用于数据通信、持久化和配置文件等场景。下面是使用protobuf的一般步骤: 1. 定义消息类型:使用protobuf语言定义文件(.proto)来描述数据结构和消息类型。你可以定义消息字段的名称、类型和规则等。 2. 编写.proto文件:在.proto文件中定义消息类型、字段和其他相关信息。例如,你可以定义消息的名称、字段的名称和类型、字段的规则(如必填、可选或重复)等。 3. 编译.proto文件:使用protobuf编译器将.proto文件编译为你所选编程语言的源代码。protobuf支持多种编程语言,如C++、Java、Python等。编译后会生成对应语言的源代码文件,其中包含与消息类型相关的类或结构体。 4. 在代码中使用protobuf:在你的代码中引入生成的源代码文件,并使用其中定义的类或结构体。你可以根据需要创建、修改和序列化protobuf消息,以及将其转换为二进制格式或其他格式。 5. 序列化和反序列化:使用protobuf库提供的方法将protobuf消息序列化为二进制格式,或者将二进制数据反序列化为protobuf消息。这样可以实现消息的传输和存储。 总结来说,使用protobuf可以实现跨语言、高效的数据序列化和反序列化,简化了数据传输和存储的过程。通过定义和编译.proto文件,并在代码中使用生成的源代码文件,你可以方便地使用protobuf进行数据处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值