Protobuf的简要介绍及使用详解
一、protobuf的应用场景
在官方文档中可以看到
protocolbuffers是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。ProtocolBuffers是一种灵活,高效,自动化机制的结构数据序列化方法-可类比XML,但是比XML更小(3~10倍)、更快(20~100倍)、更为简单。
可以看到protobuf 与json相比具有压缩比高、解压缩速度更快的优点
二、protobuf的使用
protobuf在使用上较为复杂,过程可以分为以下几步:
- 编写java 的POJO类
- 通过工具将java的POJO类,生成protobuf数据格式下的(在idea中可以下载Pojo2Proto插件)
- 新建一个以.proto的文件,并写入Pojo2Proto插件生成数据
- 通过proto.exe程序将.proto文件编译生成java类,该JAVA类中定义有PB对该类的数据格式定义、get/set操作、解/压锁数据的方法
POJO类数据:
publicclassEntity{ privateStringkey; privateStringvalue; publicStringgetKey(){ returnkey; } publicvoidsetKey(Stringkey){ this.key=key; } publicStringgetValue(){ returnvalue; } publicvoidsetValue(Stringvalue){ this.value=value; } }
生成的protobuf的数据:
syntax="proto3"; messageEntity{ stringkey=1; stringvalue=2; }
通过protoc.exe进行编译
在proto.exe的下载地址https://repo1.maven.org/maven2/com/google/protobuf/protoc/编译Entity.proto文件
protoc-3.9.2-windows-x86_64.exe ./src/main/proto/Entity.proto--java_out=./src/main/java/src/
编译后生成有EntityOuterClass类的文件 通过EntityOuterClass类压缩数据
StreamWrap.Entity.Builderbuilder=StreamWrap.Entity.newBuilder(); //构造数据 builder.setKey("123"); builder.setValue("123"); StreamWrap.Entityentity=builder.build(); //将该PB类转换为二进制数据格式 byte[]buff=entity.toByteArray();
通过EntityOuterClass类解压缩数据
总结
到此这篇关于Protobuf的简要介绍及使用的文章就介绍到这了,更多相关Protobuf使用内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!