protobuf

protobuf是一种高效的 结构化 数据存储格式,可以用于对结构化数据的串行化。

protobuf格式

建立xx.proto文件

message Person {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }
  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }
  repeated PhoneNumber phone = 4;
}

required:必须字段,必须赋值,否则在序列化和反序列化时失败
optional:可选字段
repeated:数组字段
后面的数字为位置

编译成其他语言

protoc -I=src_dir --xx_out=dst_dir
其中–xx_out中xx为语言类型,xx可以python,c++等
假定文件名为xx.proto

语言生成文件使用
pythonxx_pb2.pyimport xx_pb2
c++xx.pb.cc
xx.pb.h
编译:
g++ xx.pb.cc xx.cpp -o xx pkg-config --cflags --libs protobuf
执行:正常和c++一样

序列化与反序列化

建立Person.proto,如上xx.proto

c语言序列化与反序列化

生成Person.pb.cc和Person.pb.h,建立Person.cpp文件,如下所示:

#include "Person.pb.h"
#include <iostream>
#include <fstream>
using namespace std;
void reader()
{
	Person person;
	person.set_name("Lily");
	person.set_id(1);
	fstream output("person",ios::out|ios::binary);
	person.SerializeToOstream(&output);
}
void writer()
{
	Person person;
	fstream input("person",ios::in|ios::binary);
	person.ParseFromIstream(&input);
	cout<<person.name()<<endl;
	cout<<person.id()<<endl;
}
int main()
{
	reader();
	writer();
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值