文章目录

  • 一、Protobuf 使用文档
  • 二、创建 Protobuf 源文件
  • 三、Protobuf 语法
  • 四、参考资料

一、Protobuf 使用文档


Protobuf Java 语言对应用法 : https://developers.google.com/protocol-buffers/docs/javatutorial

使用时 , 参考上述页面的文档说明 , 进行开发 ;

二、创建 Protobuf 源文件


首先 , 编写 Protobuf 源文件 , 使用官方提供的源文件 , 进行开发 ;

syntax = "proto2";package tutorial;option java_multiple_files = true;
option java_package = "com.example.tutorial.protos";
option java_outer_classname = "AddressBookProtos";message Person {optional string name = 1;optional int32 id = 2;optional string email = 3;enum PhoneType {MOBILE = 0;HOME = 1;WORK = 2;}message PhoneNumber {optional string number = 1;optional PhoneType type = 2 [default = HOME];}repeated PhoneNumber phones = 4;
}message AddressBook {repeated Person people = 1;
}

在 Android Studio 工程中的 " app/src/main " 目录下 , 创建 proto 目录 , 在该 " app/src/main/proto " 目录下 , 创建 " addressbook.proto " 源文件 ;

将官方的 proto 示例源码拷贝到该文件中 ;


( 上图的源码添加了注释 )

三、Protobuf 语法


设置 protobuf 语法版本 : Protocol Buffers 有 proto2 和 proto3 两个版本 , 这两个版本之间的 语法 , 与 底层实现 都有一定的不同 ;

syntax = "proto2";

设置生成 Java 源文件的包名和类名 :

// 生成 Java 源文件包名
option java_package = "com.example.tutorial.protos";
// 生成 Java 源文件类名
option java_outer_classname = "AddressBookProtos";

设置生成 Java 类 : message 相当于 Java 中的 class , 编译出的源文件就是 class Person{} ;

// message 相当于 Java 中的 class
// 编译出的源文件就是 class Person{}
message Person {

设置生成 Java 类的字段名称 : 字段前有 optional 和 required 修饰 , 如果被 required 修饰 , 表示该字段不能为空 ; 被 optional 修饰 , 表示可选的 , 可以设置为空 ;

在创建后 , 会检测被 required 修饰的字段 , 如果没有赋初值 , 就会报错 ;

  // String 类型的字段// 字段前有 optional 和 required 修饰optional string name = 1;optional int32 id = 2;optional string email = 3;

枚举值 : Protobuf 中设置枚举与 Java 相同 , 定义和使用的用法如下 ;

  // 枚举enum PhoneType {MOBILE = 0;HOME = 1;WORK = 2;}message PhoneNumber {optional string number = 1;// 字段值是枚举类型, 默认是 HOME 类型optional PhoneType type = 2 [default = HOME];}

集合 : 使用 repeated 修饰字段 , 表示重复的数据 , 即集合 ;

  // 表示重复的数据 , 即集合// 有多个 PhoneNumber phones 组成的集合repeated PhoneNumber phones = 4;

完整带注释的 Protobuf 源文件 :

// 指定 Protocol Buffers 语法版本
syntax = "proto2";package tutorial;option java_multiple_files = true;// 生成 Java 源文件包名
option java_package = "com.example.tutorial.protos";
// 生成 Java 源文件类名
option java_outer_classname = "AddressBookProtos";// message 相当于 Java 中的 class
// 编译出的源文件就是 class Person{}
message Person {// String 类型的字段// 字段前有 optional 和 required 修饰optional string name = 1;// int 整型 , 32 位optional int32 id = 2;optional string email = 3;// 枚举enum PhoneType {MOBILE = 0;HOME = 1;WORK = 2;}message PhoneNumber {optional string number = 1;// 字段值是枚举类型, 默认是 HOME 类型optional PhoneType type = 2 [default = HOME];}// 表示重复的数据 , 即集合// 有多个 PhoneNumber phones 组成的集合repeated PhoneNumber phones = 4;
}message AddressBook {repeated Person people = 1;
}

四、参考资料


Protobuf 参考资料 :

  • Protobuf 官网主页 : https://developers.google.com/protocol-buffers

  • Protobuf 语法指南 : https://developers.google.com/protocol-buffers/docs/proto

  • Protobuf Java 语言对应用法 : https://developers.google.com/protocol-buffers/docs/javatutorial

  • Protobuf 源码地址 : https://github.com/protocolbuffers/protobuf

【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 使用文档 | 创建 Protobuf 源文件 | Protobuf 语法 )相关推荐

  1. PoiDocxDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0),目前只能java生成】...

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个是<PoiDemo[Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)]>的扩展,上一篇是根 ...

  2. 对消息 的正文进行序列化时出错:“生成 XML 文档时出错。”

    c# 执行存储过程时报错:对消息  的正文进行序列化时出错:"生成 XML 文档时出错." 原因是在执行存储过程时传递的里面包含有表,但是我没有给表命名. 解决方法是给声明的表命名 ...

  3. pdfbox创建pdf_PDFBox之文档创建

    1.创建一个空的PDF 下面的小例子表示如何使用PDFBox来创建一个新的PDF文档. // 创建一个空的文档 PDDocument document = new PDDocument(); // 创 ...

  4. YUIDoc example代码高亮错误、生成API文档目录不按源文件注释顺序

    1.如果发现yuidoc命令用不了,那就重装nodejs吧 昨天不知道是清扫电脑的原因,yuidoc命令用不了(命令不存在),也没有找到好的解决方法,怒重装YUIDoc也不行.最后想了想,怒重装了no ...

  5. 无法为立即文档创建临时文件: 设备上没有空间(centos root 目录爆满)

    qingli-bash: 无法为立即文档创建临时文件: 设备上没有空间: df 查看磁盘空间,发现根目录爆满 使用du -sh * 查看是哪个文件占用了这么大的空间,结果并没有找到大文件,那就可能是隐 ...

  6. 管理员技术(二): 访问练习用虚拟机、 命令行基础技巧 、 挂载并访问光盘设备、ls列表及文档创建、复制删除移动...

    一.访问练习用虚拟机 目标: 学会在教学环境中访问练习用虚拟机,主要完成以下事项: 1> 快速重置教学虚拟机环境        2> 通过"虚拟系统管理器"访问虚拟机 ...

  7. Win10 右键新建没有WORD文档创建菜单?

    环境: Win10 专业版 问题描述: 右键新建没有WORD文档创建菜单? 解决方案: 1.打开注册表,计算机\HKEY_CLASSES_ROOT.docx,右侧默认数值改为Word.Document ...

  8. -bash: 无法为立即文档创建临时文件: 结构需要清理

    linux非正常关机后,启动springboot报异常,或者cd tab  补全时报   -bash: 无法为立即文档创建临时文件: 结构需要清理 解决办法: 清理  /tmp文件夹下的 tomcat ...

  9. 使用WPS文档创建表格怎么调整行间距

    在WPS文档中可以绘制表格,表格绘制完成后,大家可在表格中输入想要展现的表格数据,表格数据可以根据需要进行调整,比如调整表格数据行间距,调整表格宽度等. 由于是手动绘制的表格,在调整表格时可能会出现牵 ...

  10. DW文档创建以及标签使用

    文献种类:专题技术总结文献 开发工具与关键技术:DW标签使用 作者:吴锦华      :年级:20级:撰写时间:2021   年 5月8日 文献编号:                归档时间:   年 ...

最新文章

  1. 集五福,我用Python
  2. (转)线段树的区间更新
  3. 第七天学习Java的笔记(IDEA环境配置)
  4. 【POJ2117】Electricity [tarjan 割点]
  5. mysql中 s命令_Mysql-概念及常用命令
  6. 一步步编写操作系统 69 汇编语言和c语言共同协作 70
  7. python标准库怎么用_Python常用标准库使用(一)
  8. 逻辑回归 - sklearn (LR、LRCV、MLP、RLR)- Python代码实现
  9. 论文浅尝 - ACL2022 | 基于多语言语义解耦表示的跨语言迁移方法实现多语言阅读理解...
  10. sigmoid和softmax总结
  11. LeetCode从读题到自闭:1. 两数之和
  12. 标签布局Tab与TabHost详细教程
  13. Android应用开发环境搭建
  14. 基于STM32的有方科技(银而达)N58模块与OneNet平台互联
  15. 微信超级更新!电脑上也能刷朋友圈了!
  16. 5G新型调制技术FBMC【5G】
  17. nsf5隐写算法 matlab,基于纹理复杂度的JPEG图像自适应隐写
  18. ROC/AUC、精准率、召回率、真正率,假正率等指标含义,学习笔记
  19. 拼多多校招笔试题给出三个点构成三角形的个数
  20. 详解什么是软件企业认定

热门文章

  1. 最近QQ联系我解决问题的郁闷
  2. GraphicsMagick 1.3.25 Linux安装部署
  3. 201521123022 《Java程序设计》 第十三周学习总结
  4. C# 的EF框架怎么连接Oracle数据库
  5. Android SlidingMenu以及ActionBarSherlock的基础使用教程
  6. 如何将Dictionary绑定到Repeater?
  7. ICA(独立成分分析)笔记
  8. Spring 学习笔记 3. 尚硅谷_佟刚_Spring_配置 Bean
  9. 联机重做日志的配置过程
  10. 摘录cocos2d-x 从环境搭建到win32项目移植android平台