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中,表示对应的值。

转载于:https://www.cnblogs.com/resentment/p/6683154.html

java操作protobuf相关推荐

  1. HBase安装配置以及Java操作hbase

    2019独角兽企业重金招聘Python工程师标准>>> Apache HBase Apache HBase™是Hadoop数据库,是一个分布式,可扩展的大数据存储. 当您需要对大数据 ...

  2. Java kryo/protobuf/protostuff序列化 or Json 性能对比

    Java kryo/protobuf/protostuff序列化 or Json 性能对比 - 腾飞的鹰 - 博客园 对于一个java object的序列化,想测一下使用json和使用一般序列化工具, ...

  3. kafka入门(4)-java操作kafka

    kafka入门(4)-java操作kafka 准备工作 创建maven工程 导入Maven Kafka POM依赖 <repositories><!-- 代码库 -->< ...

  4. java 操作 redis_java操作Redis

    10. java操作Redis 10.1 环境准备 1. 引入依赖 redis.clients jedis 2.9.0 2.创建jedis对象 package org.example; import ...

  5. Java操作Kafka执行不成功

    使用kafka-clients操作kafka始终不成功,原因不清楚,下面贴出相关代码及配置,请懂得指点一下,谢谢! 环境及依赖 <dependency><groupId>org ...

  6. java操作elasticsearch实现query String

    1.CommonTersQuery: 指定字段进行模糊查询 //commonTermsQuery @Test public void test35() throws UnknownHostExcept ...

  7. java操作dom节点的添加_java操作DOM节点的添加,删除,修改

    java操作DOM节点的添加,删除,修改 下面我们开始对此xml添加,删除,修改:方法一 import java.io.File; import java.io.IOException; import ...

  8. rocketmq(三 java操作rocket API, rocketmq 幂等性)

    JAVA操作rocketmq: 1.导入rocketmq所需要的依赖: <dependency><groupId>com.alibaba.rocketmq</groupI ...

  9. redis入门及java操作

    redis 命令可以去菜鸟教程http://www.runoob.com/redis/redis-tutorial.html 或者以下地址去学习http://www.cnblogs.com/huang ...

最新文章

  1. leetcode2 两数相加
  2. 读《世界是数字的》有感
  3. visio图标_弱电间机柜原型图整理,可编辑!(Excel,visio,CAD)
  4. php 写一个大富翁游戏,C++大富翁代码 现在要设计一个类似“大富翁”的游戏:有一条由20个格子组成的 联合开发网 - pudn.com...
  5. python使用pip离线下载并安装包
  6. 关于运行jar包时的一个错误
  7. 在不同应用场景中,我们该如何进行测试呢?
  8. [Python] 中英文标点转换
  9. 英克软件结合oracle,英克医药第三方物流管理软件
  10. 高通骁龙410e/APQ8016E嵌入式物联网应用处理器解决方案
  11. gogo protobuf
  12. ntfs磁盘格式是什么?NTFS如何读写Mac硬盘?
  13. 微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
  14. 优效时钟屏保-一款极简风格的时钟屏保
  15. 青海大学的计算机专业排名,青海大学王牌专业有哪些及专业排名
  16. Docker探赜索隐
  17. Jira Sprit冲刺更改开始日期时出现 “18/Oct/21 10:38 AM”不是有效日期。请按下列格式输入日期:dd/MMM/yy h:mm a错误
  18. 各种输入方法总结(C++)
  19. 什么是多方计算multi-party computation (MPC)
  20. u盘中的android文件夹图标不显示了,u盘里的文件夹不显示,u盘文件夹不见了

热门文章

  1. C#算法大全-1-Hanoi
  2. 网络营销第三课:利用织梦搭建动态网站(2)
  3. activeRecord 绑定属性的属性
  4. C#中有关数组和string引用类型或值类型的判断
  5. 重新定义“物联网” GreenPeak助力合作伙伴构建智能家居
  6. 关键基础设施是否会成为DDoS攻击的新目标?答案是不大会
  7. Flash完美跨域访问的方法
  8. 基于TCP(面向连接)的Socket编程
  9. Apache简单配置(4)搭建Discuz 7.0.0论坛
  10. 如何在一个背景图像上,做半透明的图。