【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 使用文档 | 创建 Protobuf 源文件 | Protobuf 语法 )
文章目录
- 一、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 语法 )相关推荐
- PoiDocxDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0),目前只能java生成】...
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个是<PoiDemo[Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)]>的扩展,上一篇是根 ...
- 对消息 的正文进行序列化时出错:“生成 XML 文档时出错。”
c# 执行存储过程时报错:对消息 的正文进行序列化时出错:"生成 XML 文档时出错." 原因是在执行存储过程时传递的里面包含有表,但是我没有给表命名. 解决方法是给声明的表命名 ...
- pdfbox创建pdf_PDFBox之文档创建
1.创建一个空的PDF 下面的小例子表示如何使用PDFBox来创建一个新的PDF文档. // 创建一个空的文档 PDDocument document = new PDDocument(); // 创 ...
- YUIDoc example代码高亮错误、生成API文档目录不按源文件注释顺序
1.如果发现yuidoc命令用不了,那就重装nodejs吧 昨天不知道是清扫电脑的原因,yuidoc命令用不了(命令不存在),也没有找到好的解决方法,怒重装YUIDoc也不行.最后想了想,怒重装了no ...
- 无法为立即文档创建临时文件: 设备上没有空间(centos root 目录爆满)
qingli-bash: 无法为立即文档创建临时文件: 设备上没有空间: df 查看磁盘空间,发现根目录爆满 使用du -sh * 查看是哪个文件占用了这么大的空间,结果并没有找到大文件,那就可能是隐 ...
- 管理员技术(二): 访问练习用虚拟机、 命令行基础技巧 、 挂载并访问光盘设备、ls列表及文档创建、复制删除移动...
一.访问练习用虚拟机 目标: 学会在教学环境中访问练习用虚拟机,主要完成以下事项: 1> 快速重置教学虚拟机环境 2> 通过"虚拟系统管理器"访问虚拟机 ...
- Win10 右键新建没有WORD文档创建菜单?
环境: Win10 专业版 问题描述: 右键新建没有WORD文档创建菜单? 解决方案: 1.打开注册表,计算机\HKEY_CLASSES_ROOT.docx,右侧默认数值改为Word.Document ...
- -bash: 无法为立即文档创建临时文件: 结构需要清理
linux非正常关机后,启动springboot报异常,或者cd tab 补全时报 -bash: 无法为立即文档创建临时文件: 结构需要清理 解决办法: 清理 /tmp文件夹下的 tomcat ...
- 使用WPS文档创建表格怎么调整行间距
在WPS文档中可以绘制表格,表格绘制完成后,大家可在表格中输入想要展现的表格数据,表格数据可以根据需要进行调整,比如调整表格数据行间距,调整表格宽度等. 由于是手动绘制的表格,在调整表格时可能会出现牵 ...
- DW文档创建以及标签使用
文献种类:专题技术总结文献 开发工具与关键技术:DW标签使用 作者:吴锦华 :年级:20级:撰写时间:2021 年 5月8日 文献编号: 归档时间: 年 ...
最新文章
- 集五福,我用Python
- (转)线段树的区间更新
- 第七天学习Java的笔记(IDEA环境配置)
- 【POJ2117】Electricity [tarjan 割点]
- mysql中 s命令_Mysql-概念及常用命令
- 一步步编写操作系统 69 汇编语言和c语言共同协作 70
- python标准库怎么用_Python常用标准库使用(一)
- 逻辑回归 - sklearn (LR、LRCV、MLP、RLR)- Python代码实现
- 论文浅尝 - ACL2022 | 基于多语言语义解耦表示的跨语言迁移方法实现多语言阅读理解...
- sigmoid和softmax总结
- LeetCode从读题到自闭:1. 两数之和
- 标签布局Tab与TabHost详细教程
- Android应用开发环境搭建
- 基于STM32的有方科技(银而达)N58模块与OneNet平台互联
- 微信超级更新!电脑上也能刷朋友圈了!
- 5G新型调制技术FBMC【5G】
- nsf5隐写算法 matlab,基于纹理复杂度的JPEG图像自适应隐写
- ROC/AUC、精准率、召回率、真正率,假正率等指标含义,学习笔记
- 拼多多校招笔试题给出三个点构成三角形的个数
- 详解什么是软件企业认定
热门文章
- 最近QQ联系我解决问题的郁闷
- GraphicsMagick 1.3.25 Linux安装部署
- 201521123022 《Java程序设计》 第十三周学习总结
- C# 的EF框架怎么连接Oracle数据库
- Android SlidingMenu以及ActionBarSherlock的基础使用教程
- 如何将Dictionary绑定到Repeater?
- ICA(独立成分分析)笔记
- Spring 学习笔记 3. 尚硅谷_佟刚_Spring_配置 Bean
- 联机重做日志的配置过程
- 摘录cocos2d-x 从环境搭建到win32项目移植android平台