protobuf 测试使用

1       介绍

Protocol buffers are a flexible, efficient, automated mechanism for serializing structured data – think XML, but smaller, faster, and simpler.

2       Example:

2.1   定义proto文件

addrbook.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;

}

2.2 编译:

protoc.exe -I=./ --cpp_out=./ ./addrbook.proto

生成文件:addrbook.pb.cc addrbook.pb.h

 

2.3 使用

(依赖库:libprotoc.lib;libprotobuf.lib

2.3.1  序列化

Person person;

person.set_id(10);

person.set_name("protobuf");

person.set_email("test@gmail.com");

Person::PhoneNumber* phone_num1 = person.add_phone();

phone_num1->set_number("12345678");

phone_num1->set_type(Person_PhoneType::Person_PhoneType_MOBILE);

Person::PhoneNumber* phone_num2 = person.add_phone();

phone_num2->set_number("123456780");

std::string ouput;

size_t size = person.ByteSize();

person.SerializeToString(&ouput);

/* 使用string做需要的操作 */

2.3.2  反序列化

Person person;

person.ParseFromString(in);

std::string name = person.name();

int id = person.id();

std::string email = person.email();

int num = person.phone_size();

Person::PhoneNumber* phone =  new Person::PhoneNumber[num];

for (size_t i = 0; i < num; ++i)

{

       phone[i] = person.phone(i);

       std::string phone_num = phone[i].number();

       int type = phone[i].type();

}

 

3       Why not just use XML?

Protocol buffers have many advantages over XML for serializing structured data. Protocol buffers:

  • are simpler
  • are 3 to 10 times smaller
  • are 20 to 100 times faster
  • are less ambiguous
  • generate data access classes that are easier to use programmatically

 

JsonXMLProtoBuf特点比较

Json

  • human readable/editable
  • can be parsed without knowing schema in advance
  • excellent browser support
  • less verbose than XML

XML

  • human readable/editable
  • can be parsed without knowing schema in advance
  • standard for SOAP etc
  • good tooling support (xsd, xslt, sax, dom, etc)
  • pretty verbose

Protobuf

  • very dense data (small output)
  • hard to robustly decode without knowing the schema (data format is internally ambiguous, and needs schema to clarify)
  • very fast processing
  • not intended for human eyes (dense binary)

All have good support on most platforms.

 

以上均为网上整理

另通过ICE和protobuf写了个简单的测试例子:http://pan.baidu.com/s/1i3oPfdN

 

posted @ 2014-02-27 19:21  good90  阅读(965)  评论(0编辑  收藏  举报