Protobuf的简要介绍及使用详解

一、protobuf的应用场景

在官方文档中可以看到

protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据) 通信协议、数据存储等。 Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 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类数据:

public class Entity {
  private String key;
  private String value;
  public String getKey() {
    return key;
  }
  public void setKey(String key) {
    this.key = key;
  }
  public String getValue() {
    return value;
  }
  public void setValue(String value) {
    this.value = value;
  }
}

    生成的protobuf的数据:  

syntax = "proto3";
 
message Entity {
  string key = 1;
  string value = 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/

编译后生成有 Entity OuterClass类的文件     通过 Entity OuterClass类压缩数据

StreamWrap.Entity.Builder builder = StreamWrap.Entity.newBuilder();
//构造数据
builder.setKey("123");
builder.setValue("123");
StreamWrap.Entity entity = builder.build();
//将该PB类转换为二进制数据格式
byte[] buff = entity.toByteArray();

通过EntityOuterClass类解压缩数据

总结

到此这篇关于Protobuf的简要介绍及使用的文章就介绍到这了,更多相关Protobuf使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(Protobuf的简要介绍及使用详解)