zoukankan      html  css  js  c++  java
  • java操作protobuf

    message与builder

    经过protoc编译完的每个message都将有一个对应的类,类的内部通过Builder设计模式进行创建对应的message,而生成的message本身是不可变的。

    message Person{
    	required string my_name=1;
    	optional int32 my_age=2;
    	repeated string phone_num=3;
    }
    //使用builder构建message
    Person p = Person.newBuilder().setMyName("res").setMyAge(20).addPhoneNum("123456").build();
    

    builder中会为每个字段创建getter和setter,同时可以看到在proto文件中使用小写和下划线构成的message在生成的对象中名字被自动改成了驼峰的格式,官方也推荐在proto文件中使用小写加下划线定义字段名,对于repeated字段在builder中会创建addFieldName以及使用index设置特定位置的setFieldName。

    在build出的对象中只存在各个字段的getter方法,而没有setter方法。需要修改的话可以调用对象的toBuilder方法生成builder进行修改,之后再build对象。在build出的对象中还有一些常用的方法:

    isInitialized 用于builder来校验所有必填字段是否初始化。
    toString 以人类可读的形式显示消息。
    mergeFrom(Mesasage other) 适用于builder,用于覆盖消息中的独立字段,递归合并内部message,对repeated元素进行拼接。
    clear() 适用builder,清空已经设置的所有字段。
    

    enum

    在proto中定义的枚举类型,会生成java中的枚举类型:

    enum Gender{
    	male=1;
    	femail=2;
    }
    
    public enum Gender implements com.google.protobuf.ProtocolMessageEnum {
        male(1),
        femail(2);
    	...
        private final int value;
    
        private Gender(int value) {
          this.value = value;
        }
    }
    

    对于定义的枚举类型生成对应的枚举类型和值,并把值存在字段的value中,表示对应的值。

  • 相关阅读:
    msysgit 上传文件夹,规范化的日常
    第三次作业【补完作业】
    c++我在努力----第三次作业体会
    编程题
    视频课程作业随笔
    HDU 4123 Bob’s Race 树形dp+单调队列
    HDU 4514 湫湫系列故事——设计风景线 树的直径
    POJ 1239 Increasing Sequences 动态规划
    BNUOJ 52318 Be Friends prim+Trie
    HDU 5925 Coconuts 离散化
  • 原文地址:https://www.cnblogs.com/resentment/p/6683154.html
Copyright © 2011-2022 走看看