linux c++ 简单使用protobuf

protobuf简介:

GoogleProtocol Buffers简称Protobuf,是Google公司内部的混合语言数据标准.它提供一种轻量,高效的结构化数据存储结构。

使用方法:

1.下载protobuf,然后编译,请参考protobuf2.6.1海思平台交叉编译

2.定义.proto文件

例如(addressbook.proto):

message Person {
  required string name = 1;
  required int32 id = 2;        // Unique ID number for this person.
  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;
}

// Our address book file is just one of these.
message AddressBook {
  repeated Person person = 1;
}

对.proto文件关键性地方分析:

a.message是定义消息的关键字,同比c++中的struct/class,message可以嵌套使用

b.限定符required表示该字段必须存在,否则对应的message“未初始化”,debug模式下导致断言,release模式下解析失败;

c.限定符optional表示该字段可选存在,

d.限定符repeated表示该字段为重复字段,可以看着动态数组

e.int32,string 为protobuf数据类型

f.文件注释使用//

g.enum 为protobuf定义union类型属性

定义一个属性:

/*
限定符     属性类型   属性名称 属性顺序号  默认值  
*/
optional  PhoneType  type   =    2      [default = HOME];

3.编译协议成C++文件

/*
protoc为安装的编译器,在安装目录的bin目录下
--proto_path声明了一个.proto文件所在的具体目录
--cpp_out目标目录,即c++文件生成的目录
最后为待编译的消息定义文件
*/
protoc --proto_path=/protobuf --cpp_out=/protobuf /protobuf/addressbook.proto

4.简单使用

/*
放置消息
*/
Person person;
person.set_name("yang");
person.set_id(1234);
person.set_email("[email protected]");
fstream output("file", ios::out | ios::binary);
person.SerializeToOstream(&output);
/*
读取消息
*/
fstream input("file", ios::in | ios::binary);
Person person;
person.ParseFromIstream(&input);
cout << "Name: " << person.name() << endl;
cout << "E-mail: " << person.email() << endl;


       







你可能感兴趣的:(过程)