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

  • 相关阅读:
    防止特殊html字符的问题(xxs攻击)方法
    asp.net 服务器Button控件使用(onclick和onclientclick使用)
    Asp:Button控件onclick事件无刷新页面提示消息
    动态添加Marquee标签,并动态赋值与属性
    asp.net 前台通过Eval()绑定动态显示样式
    asp.net 中json字符串转换
    近况
    C# fixed语句固定变量详解
    fixed说明
    Net架构必备工具列表
  • 原文地址:https://www.cnblogs.com/good90/p/3572221.html
Copyright © 2011-2022 走看看