博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
protoful进行序列化
阅读量:5886 次
发布时间:2019-06-19

本文共 1484 字,大约阅读时间需要 4 分钟。

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

一、开发前的准备

下载protoful :,下载需要的版本

二、创建.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类

653ac36dgd6d8a16bb72b&690

四、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;

}

转载于:https://www.cnblogs.com/ywqbj/p/5667599.html

你可能感兴趣的文章
53. Maximum Subarray
查看>>
flask踩坑和排坑记录
查看>>
iOS UITableView 微信页面
查看>>
得到一定范围内的随机数
查看>>
使用Nodejs获取博客园博客数据并处理转发
查看>>
2003终端服务器授权,120天试用期限制
查看>>
springboot项目创建(myeclipse2017)
查看>>
Auto-encoder 在异常检测中的应用
查看>>
C#委托的介绍(delegate、Action、Func、predicate)
查看>>
mysql 中判断表是否存在 以及表存在则删除
查看>>
StringBuffer
查看>>
不谈商业模式,为什么众筹新闻难成功
查看>>
Java 创建不可变对象-final关键字的使用总结
查看>>
UGUI组件之Image 组件简单笔记
查看>>
BZOJ3435 & 洛谷3920 & UOJ55:[WC2014]紫荆花之恋
查看>>
swift 广告轮播图
查看>>
marmalade android 5.0 JNI 调用失败的解决方案
查看>>
float 浮动详解
查看>>
【总结整理】面试需了解
查看>>
ArcEngine开发遇到的问题(转)
查看>>