• 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

  • 相关阅读:
    GAE 随机获取实体
    纵观 jBPM:从 jBPM3 到 jBPM5 以及 Activiti5
    NetBeans 时事通讯(刊号 # 131 Jan 04, 2011)
    发现 Google Buzz 与 Google Code 进行了集成
    改良程序的 11 技巧
    《让子弹飞》向我们展现真实的革命
    有关STL中的容器和MFC的集合类型构造函数区别的一点思考
    GAE 随机获取实体
    改良程序的 11 技巧
    NetBeans 时事通讯(刊号 # 132 Jan 11, 2011)
  • 原文地址:https://www.cnblogs.com/good90/p/3572221.html
Copyright © 2020-2023  润新知