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

  • 相关阅读:
    MySQL-基本sql命令
    Java for LeetCode 203 Remove Linked List Elements
    Java for LeetCode 202 Happy Number
    Java for LeetCode 201 Bitwise AND of Numbers Range
    Java for LeetCode 200 Number of Islands
    Java for LeetCode 199 Binary Tree Right Side View
    Java for LeetCode 198 House Robber
    Java for LeetCode 191 Number of 1 Bits
    Java for LeetCode 190 Reverse Bits
    Java for LeetCode 189 Rotate Array
  • 原文地址:https://www.cnblogs.com/good90/p/3572221.html
Copyright © 2011-2022 走看看