首页 > 学院 > 开发设计 > 正文

ProtoBuffer 简单例子

2019-11-06 06:36:13
字体:
来源:转载
供稿:网友

最近学了一下PRotobuf,写了一个简单的例子,如下:

person.proto文件

[cpp] view plain copymessage Person{      required string name = 1;      required int32 age = 2;      optional string email = 3;      enum PhoneType{           MOBILE = 1;          HOME = 2;          WORK = 3;      }      message Phone{          required int32 id = 1;          optional PhoneType type = 2 [default = HOME];      }      repeated string phoneNum = 4;  //对应于cpp的vector  }  安装好protoc以后,执行protoc person.proto --cpp_out=. 生成 person.pb.h和person.pb.cpp

写文件(write_person.cpp):

[cpp] view plain copy#include <iostream>  #include "person.pb.h"  #include <fstream>  #include <string>    using namespace std;    int main(){      string buffer;      Person person;      person.set_name("chemical");      person.set_age(29);      person.set_email("ygliang2009@Gmail.com");      person.add_phonenum("abc");      person.add_phonenum("def");      fstream output("myfile",ios::out|ios::binary);      person.SerializeToString(&buffer); //用这个方法,通常不用SerializeToOstream      output.write(buffer.c_str(),buffer.size());      return 0;  }  编译时要把生成的cpp和源文件一起编译,如下:g++ write_person.cpp person.pb.cpp -o write_person -I your_proto_include_path -L your_proto_lib_path -lprotoc -lprotobuf运行时记得要加上LD_LIBRARY_PATH=your_proto_lib_path

读文件(read_person.cpp):

[cpp] view plain copy#include <iostream>  #include "person.pb.h"  #include <fstream>  #include <string>    using namespace std;    int main(){      Person *person = new Person;      char buffer[BUFSIZ];      fstream input("myfile",ios::in|ios::binary);      input.read(buffer,sizeof(Person));      person->ParseFromString(buffer);  //用这个方法,通常不用ParseFromString      cout << person->name() << person->phonenum(0) << endl;      return 0;  }  编译运行方法同上:g++ read_person.cpp person.pb.cpp -o read_person -I your_proto_include_path -L your_proto_lib_path -lprotoc -lprotobuf
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表