zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 传球游戏
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Java实现 蓝桥杯VIP 算法训练 奇偶判断
    Java实现 蓝桥杯VIP 算法训练 传球游戏
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Qt: 访问容器(三种方法,加上for循环就四种了)good
  • 原文地址:https://www.cnblogs.com/good90/p/3572221.html
Copyright © 2011-2022 走看看