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中,表示对应的值。
转载于:https://www.cnblogs.com/resentment/p/6683154.html
java操作protobuf相关推荐
- HBase安装配置以及Java操作hbase
2019独角兽企业重金招聘Python工程师标准>>> Apache HBase Apache HBase™是Hadoop数据库,是一个分布式,可扩展的大数据存储. 当您需要对大数据 ...
- Java kryo/protobuf/protostuff序列化 or Json 性能对比
Java kryo/protobuf/protostuff序列化 or Json 性能对比 - 腾飞的鹰 - 博客园 对于一个java object的序列化,想测一下使用json和使用一般序列化工具, ...
- kafka入门(4)-java操作kafka
kafka入门(4)-java操作kafka 准备工作 创建maven工程 导入Maven Kafka POM依赖 <repositories><!-- 代码库 -->< ...
- java 操作 redis_java操作Redis
10. java操作Redis 10.1 环境准备 1. 引入依赖 redis.clients jedis 2.9.0 2.创建jedis对象 package org.example; import ...
- Java操作Kafka执行不成功
使用kafka-clients操作kafka始终不成功,原因不清楚,下面贴出相关代码及配置,请懂得指点一下,谢谢! 环境及依赖 <dependency><groupId>org ...
- java操作elasticsearch实现query String
1.CommonTersQuery: 指定字段进行模糊查询 //commonTermsQuery @Test public void test35() throws UnknownHostExcept ...
- java操作dom节点的添加_java操作DOM节点的添加,删除,修改
java操作DOM节点的添加,删除,修改 下面我们开始对此xml添加,删除,修改:方法一 import java.io.File; import java.io.IOException; import ...
- rocketmq(三 java操作rocket API, rocketmq 幂等性)
JAVA操作rocketmq: 1.导入rocketmq所需要的依赖: <dependency><groupId>com.alibaba.rocketmq</groupI ...
- redis入门及java操作
redis 命令可以去菜鸟教程http://www.runoob.com/redis/redis-tutorial.html 或者以下地址去学习http://www.cnblogs.com/huang ...
最新文章
- leetcode2 两数相加
- 读《世界是数字的》有感
- visio图标_弱电间机柜原型图整理,可编辑!(Excel,visio,CAD)
- php 写一个大富翁游戏,C++大富翁代码 现在要设计一个类似“大富翁”的游戏:有一条由20个格子组成的 联合开发网 - pudn.com...
- python使用pip离线下载并安装包
- 关于运行jar包时的一个错误
- 在不同应用场景中,我们该如何进行测试呢?
- [Python] 中英文标点转换
- 英克软件结合oracle,英克医药第三方物流管理软件
- 高通骁龙410e/APQ8016E嵌入式物联网应用处理器解决方案
- gogo protobuf
- ntfs磁盘格式是什么?NTFS如何读写Mac硬盘?
- 微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
- 优效时钟屏保-一款极简风格的时钟屏保
- 青海大学的计算机专业排名,青海大学王牌专业有哪些及专业排名
- Docker探赜索隐
- Jira Sprit冲刺更改开始日期时出现 “18/Oct/21 10:38 AM”不是有效日期。请按下列格式输入日期:dd/MMM/yy h:mm a错误
- 各种输入方法总结(C++)
- 什么是多方计算multi-party computation (MPC)
- u盘中的android文件夹图标不显示了,u盘里的文件夹不显示,u盘文件夹不见了