当前位置: 首页 > news >正文

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

相关文章:

  • 搭建windows server 2008 r2 FTP 后 开启防火墙无法访问的解决办法
  • 解读ASP.NET 5 MVC6系列(4):核心技术与环境配置
  • Python学习(二) 运行Python,编译Python
  • hihoCoder #1094 : Lost in the City(枚举,微软苏州校招笔试 12月27日 )
  • bellman-ford算法
  • 北亚工程师详解数据恢复中RAID6结构
  • NetScaler上配置公网证书时的注意事项
  • 使用MVP模式重构代码
  • 串口小票打印机调试命令
  • 【小计】PostgreSQL实现三元表达式功能
  • 用Docker搭建WordPress博客
  • Centos下Yum安装PHP5.5,5.6
  • angular组件开发
  • C++ 虚函数经典深入解析 (good)
  • XEN cpu 调度问题
  • CODING 缺陷管理功能正式开始公测
  • Docker: 容器互访的三种方式
  • Hexo+码云+git快速搭建免费的静态Blog
  • httpie使用详解
  • IP路由与转发
  • JAVA 学习IO流
  • javascript 哈希表
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • redis学习笔记(三):列表、集合、有序集合
  • Travix是如何部署应用程序到Kubernetes上的
  • Vue 动态创建 component
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 从伪并行的 Python 多线程说起
  • 工作中总结前端开发流程--vue项目
  • 如何实现 font-size 的响应式
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 我建了一个叫Hello World的项目
  • 新书推荐|Windows黑客编程技术详解
  • 延迟脚本的方式
  • HanLP分词命名实体提取详解
  • ​比特币大跌的 2 个原因
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (搬运以学习)flask 上下文的实现
  • (多级缓存)多级缓存
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (十三)Flask之特殊装饰器详解
  • (一)SpringBoot3---尚硅谷总结
  • (一)VirtualBox安装增强功能
  • *** 2003
  • ./configure、make、make install 命令
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost