1 介紹less
Protocol buffers are a flexible, efficient, automated mechanism for serializing structured data – think XML, but smaller, faster, and simpler.dom
addrbook.proto測試
message Person {flex
required string name = 1;ui
required int32 id = 2;spa
optional string email = 3;excel
enum PhoneType {code
MOBILE = 0;orm
HOME = 1;ci
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
}
protoc.exe -I=./ --cpp_out=./ ./addrbook.proto
生成文件:addrbook.pb.cc addrbook.pb.h
(依賴庫:libprotoc.lib;libprotobuf.lib
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作須要的操做 */
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();
}
Protocol buffers have many advantages over XML for serializing structured data. Protocol buffers:
Json、XML、ProtoBuf特色比較
Json
XML
Protobuf
All have good support on most platforms.
以上均爲網上整理
另經過ICE和protobuf寫了個簡單的測試例子:http://pan.baidu.com/s/1i3oPfdN