最近学了一下protobuf,写了一个简单的例子,如下:
person.proto文件
- message 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;
- }
安装好protoc以后,执行protoc person.proto --cpp_out=. 生成 person.pb.h和person.pb.cpp 写文件(write_person.cpp):
- #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);
- 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):
- #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);
- 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
本文转自博客园知识天地的博客,原文链接:,如需转载请自行联系原博主。