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使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 在go语言中安装与使用protobuf的方法详解

    简介 本文主要给大家介绍了关于go语言安装使用protobuf的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. protobuf是Google开发出来的一个语言无关.平台无关的数据序列化工具,在rpc或tcp通信等很多场景都可以使用.通俗来讲,如果客户端和服务端使用的是不同的语言,那么在服务端定义一个数据结构,通过protobuf转化为字节流,再传送到客户端解码,就可以得到对应的数据结构.这就是protobuf神奇的地方.并且,它的通信效率极高,"一条消息数据,用pr

  • Android中使用protobuf的具体示例

    简介 Google Protocol Buffers 简称 Protobuf,类似 json 或 XML,是一种序列化结构数据的机制,但是比它们更小.更快.更简单.同时支持多语言,跨平台. 目前主要有两个大版本:proto2 和 proto3. 其中 proto2 支持 Java.Python. Objective-C.和 C++. proto3 增加了对Go.JavaNano.Ruby.和 C#的支持. proto例子 syntax = "proto3"; package tutor

  • 详解vue中使用protobuf踩坑记

    官方解释为: Protocol buffers are a flexible, efficient, automated mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source c

  • C#使用Protocol Buffer(ProtoBuf)进行Unity中的Socket通信

    首先来说一下本文中例子所要实现的功能: 基于ProtoBuf序列化对象 使用Socket实现时时通信 数据包的编码和解码 下面来看具体的步骤: 一.Unity中使用ProtoBuf 导入DLL到Unity中, 创建网络传输的模型类: using System; using ProtoBuf; //添加特性,表示可以被ProtoBuf工具序列化 [ProtoContract] public class NetModel { //添加特性,表示该字段可以被序列化,1可以理解为下标 [ProtoMem

  • vue中使用protobuf的过程记录

    由于目前公司采用了ProtoBuf做前后端数据交互,进公司以来一直用的是公司大神写好的基础库,完全不了解底层是如何解析的,一旦报错只能求人,作为一只还算有钻研精神的猿,应该去了解一下底层的实现,在这里记录一下学习过程. Protobuf简单介绍 Google Protocol Buffer(简称 Protobuf)是一种轻便高效的结构化数据存储格式,平台无关.语言无关.可扩展,可用于通讯协议和数据存储等领域. 有几个优点: 1.平台无关,语言无关,可扩展: 2.提供了友好的动态库,使用简单; 3

  • Protobuf的简要介绍及使用详解

    一.protobuf的应用场景 在官方文档中可以看到 protocol buffers 是一种语言无关.平台无关.可扩展的序列化结构数据的方法,它可用于(数据)通信协议.数据存储等. Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍).更快(20 ~ 100倍).更为简单. 可以看到protobuf 与json相比具有 压缩比高 .解压缩速度更快的优点 二.protobuf的使用 protobuf在使用上较为

  • Maven build 命令介绍的使用详解

    常用命令: 打包:mvn package 编译:mvn compile 清空:mvn clean(清除编译后目录,默认是target目录) 运行测试:mvn test 安装jar包到本地仓库中:mvn install 跳过测试:mvn xxx -DskipTests 1.创建 Maven 工程 ①.在 src/main/java 新建包 com.ys.maven,然后在这个包中创建类 HelloMaven.java package com.ys.maven; public class Hello

  • Python JWT 介绍和使用详解

    1. JWT 介绍 ​jwt( JSON Web Tokens ),是一种开发的行业标准 RFC 7519 ,用于安全的表示双方之间的声明.目前,jwt广泛应用在系统的用户认证方面,特别是现在前后端分离项目 ​jwt认证流程: ​在项目开发中,一般会按照上图所示的过程进行认证,即:用户登录成功之后,服务端给用户浏览器返回一个 token,以后用户浏览器要携带 token 再去向服务端发送请求,服务端校验 token 的合法性,合法则给用户看数据,否则,返回一些错误信息 ​传统token方式和jw

  • React Fragment介绍与使用详解

    目录 前言 Fragments出现动机 React Fragment介绍与使用 <React.Fragment> 与 <>区别 前言 在向 DOM 树批量添加元素时,一个好的实践是创建一个document.createDocumentFragment,先将元素批量添加到 DocumentFragment 上,再把 DocumentFragment 添加到 DOM 树,减少了 DOM操作次数的同时也不会创建一个新元素. 和 DocumentFragment 类似,React 也存在

  • TKMybatis的介绍和使用详解

    目录 一.什么是 TKMybatis 二.TKMybatis 使用 2.1 Springboot 项目中加入依赖 2.2 使用讲解 2.3 实际案例 三.扩展介绍 泛型(实体类)的类型必须符合要求 所有的mapper继承此类将具有以下通用方法 一.什么是 TKMybatis TKMybatis 是基于 Mybatis 框架开发的一个工具,内部实现了对单表的基本数据操作,只需要简单继承 TKMybatis 提供的接口,就能够实现无需编写任何 sql 即能完成单表操作. 二.TKMybatis 使用

  • Shell AWK编程的基本介绍和使用详解

    目录 1.AWK介绍 (1)AWK概述 (2)printf格式化输出 (3)printf命令说明 2.AWK的基本使用 (1)AWK命令说明 (2)AWK命令使用 1.AWK介绍 (1)AWK概述 AWK是一种处理文本文件的语言,是一个强大的文本分析工具. AWK可以看成一门独立的语言,它拥有语言的基本特征,换句话说AWK可以写出极其繁琐和复杂的程序,AWK的语法比Shell的语法还难以接收.但绝大多数情况下,我们并不需要用AWK写过于复杂的东西,建议能用Shell处理的需求就不用AWK来解决.

  • C# 守护进程的介绍及实现详解

    目录 1.为什么需要守护进程 2.守护进程有哪几种方式 3.监听系统事件 和 WMI查询事件代码实现 1) 系统事件监听进程的关闭 2)WMI监听进程的启动和关闭 1.为什么需要守护进程 一般是为了保护我们的程序/服务的正常运行,当程序被关闭.异常退出等时再次启动程序/恢复服务 2.守护进程有哪几种方式 常见的守护进程的方式:1.轮询(轮询最简单也最low,这里不再作说明)2.监听系统事件3.WMI查询事件 3.监听系统事件 和 WMI查询事件代码实现 1) 系统事件监听进程的关闭 需要引入 S

  • Python Ast抽象语法树的介绍及应用详解

    目录 引言 1. AST简介 2. 创建AST 2.1 Compile函数 2.2 生成ast 3. 遍历AST 3.1 ast.NodeTransfer 3.2 ast.NodeTransformer 4.AST应用 4.1 汉字检测 4.2 Closure 检查 引言 Abstract Syntax Trees即抽象语法树.Ast是python源码到字节码的一种中间产物,借助ast模块可以从语法树的角度分析源码结构. 此外,我们不仅可以修改和执行语法树,还可以将Source生成的语法树unp

  • C/C++指针介绍与使用详解

    目录 什么是指针 定义指针变量 间接引用指针 常or常常 指向指针的指针 指针与数组 指针的运算 堆内存分配 C语言 C++语言 指针与函数 数组名作为函数的入口参数 函数名作为参数传入其他函数 使用指针修改函数参数 变量的引用作为函数的参数 两个常用的字符串函数 总结 什么是指针 C/C++语言拥有在程序运行时获得变量的地址和操作地址的能力,这种用来操作地址的特殊类型变量被称作指针. 翻译翻译什么tmd叫tmd指针! 变量或常量的指针存储的数据是 :对应的变量或常量在内存中的地址. 图解: 此

  • Vue中mixins混入的介绍与使用详解

    目录 一.来自官网的描述 二.如何创建Mixins 三.项目中如何使用混入 四.与vuex的区别 五.与公共组件的区别 一.来自官网的描述 混入 (mixins): 是一种分发 Vue 组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项. 二.如何创建Mixins 在src目录下创建一个mixins文件夹,文件夹下新建一个myMixins.js文件.前面我们说了mixins是一个js对象,所以应该以对象的形式来定义my

随机推荐