Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。

一、开发前的准备

下载protoful :https://github.com/google/protobuf/releases,下载需要的版本

二、创建.proto文件

option java_package = "io.netty.example.codec"
option java_outer_classname = "PersonProtobuf" message Person { required string name = 1;
required int32 id =2;
option string email = 3; enum PhoneType{
MOBILE = 0;
HOME = 1;
WORK =2;
} message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
} repeated PhoneNumber phone = 4; message CountryInfo {
required string name = 1;
required string code = 2;
optional int32 number = 3;
} }

三、使用protoc.exe生成java类

解压该下载的protoc-2.6.0-win32.zip,得到protoc.exe,把文件msg.proto拷贝到当前目录执行

protoc.exe --java_out=./ msg.proto

在目录下就会产生java类

四、protobuf的语法

proto文件中的数据类型可以分为两大类:复合数据类型标准数据类型复合数据类型包括枚举message类型;标准数据类型包含:整形、浮点、字符串等,后面会详细介绍。

  • message

最常用的数据格式就是message,例如CountryInfo 可以用message表示:

message CountryInfo {

   required string name = 1;

   required string code = 2;

   optional int32 number = 3;

}

Java生成后会是这样的类

  • required

必须赋值,不能为空,否则该条message会被认为是“uninitialized”。build一个“uninitialized” message会抛出一个RuntimeException异常,解析一条“uninitialized” message会抛出一条IOException异常。除此之外,“required”字段跟“optional”字段并无差别。

  • optional

字段可以赋值,也可以不赋值。假如没有赋值的话,会被赋上默认值。

  • repeated

该字段可以重复任意次数,包括0次。重复数据的顺序将会保存在protocol buffer中,将这个字段想象成一个可以自动设置size的数组就可以了

  • Enum

enum PhoneType{

    MOBILE = 0;

    HOME = 1;

    WORK =2;

}

最新文章

  1. JavaScript 作用域知识点梳理
  2. Java内部类详解
  3. Android Studio2.2.2下RecyclerView的使用
  4. Unity中Instantiate一个prefab时需要注意的问题
  5. iscroll5 上拉,下拉 加载数据
  6. jenkins 邮件配置
  7. 【编程题目】输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数, 使其和等于 m ... ★
  8. 第1章 C#类型基础
  9. pascal矩阵
  10. (转).net Application.DoEvents()的作用
  11. zabbix图中出现中文乱码问题
  12. Esper学习之四:Context
  13. 在控制台显示“Hello World”
  14. csrf
  15. EOS 开发进展速报
  16. HTML标签 按功能排序
  17. php开发微信APP支付接口
  18. 【RAY TRACING THE REST OF YOUR LIFE 超详解】 光线追踪 3-6 直接光源采样
  19. 1014 Uniform Generator ACM
  20. [nginx]盗链和防盗链场景模拟实现

热门文章

  1. C# 集合-并发处理-锁OR线程
  2. Oracle RAC inventory.xml损坏后如何修复
  3. devexpress13学习系列(四)PDFViewer(4)
  4. PostgreSQL rule view materialized view examples
  5. C#: 异步委托
  6. 自己使用Fresco时遇到的相关问题
  7. 创建一个web Test Plan
  8. javascript DOM对象
  9. <构建之法>之一至二章
  10. EBS登陆链接网址