美文网首页
Protocol Buffers

Protocol Buffers

作者: V_coa | 来源:发表于2017-09-15 23:24 被阅读19次

    在使用 PB (Protocol Buffers)之前,首先要定义一个 *.proto 的文件,如下:

    syntax = "proto3";
    
    message Contact {
    
      enum ContactType {
        SPEAKER = 0;
        ATTENDANT = 1;
        VOLUNTEER = 2;
      }
    
      string first_name = 1;
      string last_name = 2;
      string twitter_name = 3;
      string email = 4;
      string github_link = 5;
      ContactType type = 6;
      string imageName = 7;
    };
    
    

    通过 protocol buffer compiler,将生成相应语言的的 classes,在 Swift 中生成的是 struct,可以把生成相应的 classes/structs 用在工程中。

    image.png

    优点

    • 更快和更小: 根据 Google 对 PB 的介绍,PB 比常用的格式要小 3-10 倍。
    • 类型安全: 因为每个属性都明确类型
    • 自动反系列化: 无须再写相关序列化代码
    • 可以用到多个平台

    缺陷

    • 要花费时间学习相关 PB 的定义语法
    • 可读性差,不像 XML 和 JSON
    syntax = "proto3";
    
    message Contact { // 1
    
      enum ContactType { // 2
        SPEAKER = 0;
        ATTENDANT = 1;
        VOLUNTEER = 2;
      }
    
      string first_name = 1; //3
      string last_name = 2;
      string twitter_name = 3;
      string email = 4;
      string github_link = 5;
      ContactType type = 6;
      string imageName = 7;
    };
    
    message Speakers { // 4
      repeated Contact contacts = 1;
    };
    
    

    上面做了什么:

    1. 定义了 Contact 这个结构,通过这个结构,在 app 中展示相关信息
    2. Contact 被分成不同的类型
    3. messageenum 的域中必须赋值一个递增并且独一无二的标记,
    4. Speakers 中是一个数组,用 repeated 标明

    生成 Swift Structs

    通过 .protp,能生成 Swift structs, 该结构体提供了,相关的序列化方法。生成相关的类文件

    protoc --swift_out=. contact.proto
    
    protoc -I=. --python_out=. ./contact.proto
    
    

    然后导入相关项目中,就可以使用了

    相关文章

      网友评论

          本文标题:Protocol Buffers

          本文链接:https://www.haomeiwen.com/subject/vvkqsxtx.html