文章目录

  • 一、前言
  • 二、pb简介
  • 三、pb简单使用方法
  • 四、例子
  • 五、pb工具和模型免费下载地址

一、前言

在我们开发的过程中,可能会遇到这个问题,要展示一个二维码,二维码里有很多数据,但是数据太多了,导致二维码过密,识别费劲,同时还存在安全问题,比如通过草料等软件解析,就能够知道二维码里的数据,这样也不安全。这个时候就可以试试pb来进行加密压缩了。

pb工具的百度网盘链接在最下方。

二、pb简介

pb全称protobuf,proto协议的生成和解析是开源代码,在github上搜com.google.protobuf就可以了。

三、pb简单使用方法

  1. 生成模型;
    创建一个proto文件,格式使用proto3的语法

  2. 编译成java或C#实体类
    利用protoc工具生成实体类
    包内包含了编译工具protoc.exe、一个proto格式样例、一个批量转换器

  3. 添加protobuf的包进行创建和解析
    将生成的实体类文件直接加入到工程中,并在pom文件中增加对应的包

        <dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId><version>3.11.4</version></dependency>

然后直接可以使用了。

四、例子

  1. 在pb工具和模型中定义

    这里最好用a,b,c这样命名,可以减少字符长度。

  2. 点击bat,会生成一个包,里面包含一个文件。

    把上面生成的文件放到项目中。

  3. 然后就可以进行调用了,下面相当于伪代码不能直接用,也不是核心

            if (b) {returnMsgEntity1.setCode(200);// 数据加密 这里缺少一项总金额ProxyApplactionDTO.Qrcode builder = ProxyApplactionDTO.Qrcode.newBuilder().setA(data.getEnterprise_code()).setB(data.getEnterprise_name()).setC(data.getBank() == null ? "" : data.getBank()).setD(data.getAccount() == null ? "" : data.getAccount()).setE(data.getAddress() == null ? "" : data.getAddress()).setF(data.getPhone() == null ? "" : data.getPhone()).setG(data.getTotal_price()).setH(data.getNum()).setI(data.getProduct_name()).setJ(data.getSeller_phone()).setK(data.getSeller_address()).setL(data.getUnit() == null ? "" : data.getUnit()).setM(data.getModel() == null ? "" : data.getModel()).setN(data.getNote() == null?"":data.getNote()).setO(data.getAll_price()).build();byte[] compress = new byte[1024];try {compress = CompressUtil.compressByte(builder.toByteArray());} catch (IOException e) {e.printStackTrace();}// base64String base64 = Base64Util.encode(compress);redisService.setNoSeria("proxy","code",base64,1000*60*60);// 解byte[] decode = Base64Util.decode(base64);byte[] bytes = CompressUtil.uncompressByte(decode);ProxyApplactionDTO.Qrcode p2 = ProxyApplactionDTO.Qrcode.parseFrom(bytes);
  1. 核心代码,CompressUtil工具类,主要是压缩解压缩的。
package com.aisino.util.compress;import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;public class CompressUtil {// 压缩public static String compress(String str) throws IOException {if (str == null || str.length() == 0) {return str;}ByteArrayOutputStream out = new ByteArrayOutputStream();GZIPOutputStream gzip = new GZIPOutputStream(out);gzip.write(str.getBytes());gzip.close();return out.toString("ISO-8859-1");}// 压缩public static byte[] compressByte(byte[] bytes) throws IOException {if (bytes == null || bytes.length == 0) {return bytes;}ByteArrayOutputStream out = new ByteArrayOutputStream();GZIPOutputStream gzip = new GZIPOutputStream(out);gzip.write(bytes);gzip.close();return out.toByteArray();}// 解压缩public static byte[] uncompressByte(byte[] bytes) throws IOException {if (bytes == null || bytes.length == 0) {return bytes;}ByteArrayOutputStream out = new ByteArrayOutputStream();ByteArrayInputStream in = new ByteArrayInputStream(bytes);GZIPInputStream gunzip = new GZIPInputStream(in);byte[] buffer = new byte[256];int n;while ((n = gunzip.read(buffer)) >= 0) {out.write(buffer, 0, n);}// toString()使用平台默认编码,也可以显式的指定如toString(&quot;GBK&quot;)return out.toByteArray();}// 解压缩public static String uncompress(String str) throws IOException {if (str == null || str.length() == 0) {return str;}ByteArrayOutputStream out = new ByteArrayOutputStream();ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes("ISO-8859-1"));GZIPInputStream gunzip = new GZIPInputStream(in);byte[] buffer = new byte[256];int n;while ((n = gunzip.read(buffer)) >= 0) {out.write(buffer, 0, n);}// toString()使用平台默认编码,也可以显式的指定如toString(&quot;GBK&quot;)return out.toString();}
}

通过以上就能够吧二维码的数据压缩,并且数据越多,越好用。

五、pb工具和模型免费下载地址

下载地址

Java使用pb【protobuf】压缩解决二维码内容过多导致二维码太密的问题相关推荐

  1. 疾风之刃鸿蒙炸裂,疾风之刃二周年版本更新内容一览 疾风之刃二周年版本更新内容详解...

    今天小编为大家带来的就是疾风之刃二周年版本更新内容的简单介绍,还不清楚疾风之刃二周年版本都做了哪些更新的小伙伴们抓紧时间跟上小编一起来看一下吧! 天武僧的两个转职光音天和自在天在二次觉醒之后,职业名称 ...

  2. java cmd找不到文件_cmd中输入java找不到文件解决方法

    很多小伙伴都需要运行java代码,但是最近很多的小伙伴都遇到了找不到文件这个问题很是棘手,那么这个问题该怎么解决呢?下面就为大家带来解决方法. cmd中输入java找不到文件怎么办: 方法一. 1.找 ...

  3. 网页生成二维码 把二维码变成图片 下载二维码

    目录 网页生成二维码 1 将二维码变成图片 2 1效果:二维码变成了图片 2 下载二维码 2 1全部代码 3 网页生成二维码 导入生成二维码需要的js文件(https://github.com/lrs ...

  4. python3 + opencv +pyzbar实时检测二维码 / 定位二维码,并绘制出二维码的框和提取二维码内容

    python3 + opencv +pyzbar实时检测二维码 / 定位二维码,并绘制出二维码的框和提取二维码内容 1 pyzbar二维码检测模块 1.1. pyzbar模块介绍 1.2 pyzbar ...

  5. elementUI表格中 使用 jszip+file-saver+qrcode展示二维码以及批量下载二维码(包括过程中的坑)

    需求:在elementUI表格中显示二维码,以及批量下载二维码 上图: 首先我们先做好前置工作npm下载   qrcode和 jszip和file-saver, 然后qrcode我封装成一个组件sm- ...

  6. Halcon二维码识别,多二维码识别,附代码及常见算子解释

    前言 二维码作为机器视觉常见的检测场景,常常用于产品类型检测,MES系统对接等场景,不同于常见的halcon图像处理流程,二维码识别不需要做图像分割便可以很快的完成二维码区域定位与二维码检测.这里对常 ...

  7. 安全狗php站点404,开启安全狗响应内容保护导致404返回200状态码的解决办法

    开启安全狗响应内容保护导致404返回200状态码的解决办法 2020-04-08 开启安全狗响应内容保护导致404状态码返回200的解决办法 今天无意中对www.tbadc.com的404错识做了一个 ...

  8. JAVA代码实现扫码购带圆图二维码生成

    JAVA代码生成带图片的圆形二维码 需求背景 技术方案 程序设计 代码实现 实现效果 过程中遇到的问题 写在最后 需求背景 针对常规的新媒体运营渠道,经常要推出一些福利商品,只能通过自媒体的渠道进行购 ...

  9. java 二维数组位置_java 找到二维数组指定元素的位置

    这个是代码编译时没有问题运行出错.主要功能是首先将txt格式文本导入二维数组,然后在二维数组中查找指定元素的行号和列号.运行结果出错显示为:importjava.util.*;importjava.i ...

最新文章

  1. python文件存储过程_python调用MySql存储过程
  2. python 读取鼠标选中文本_木辛老师的编程课堂:Python和Qt之页面布局实战篇(一)...
  3. linux 我的世界 跨平台联机,我的世界跨平台联机 PC、手机等平台数据互通
  4. 图说Hadoop HA
  5. 深度学习基础 | NLP大魔王 · BERT
  6. 手机不用了,如何消除里面的数据和信息而又不被人可以恢复?
  7. 模版之家全站静态模板免费下载
  8. 解构华为AI技术布局:构建无所不及的智能
  9. python输入直角三角形两条直角边、输出斜边长_python直角三角形的两个直角边、求斜边_直角三角形斜边公式计算器 两个直角边边长的平方加起来等......
  10. unity游戏开发之打包apk谷歌上架报错总结
  11. Android Studio运行app启动模拟器一直卡在“Wating for target device to come online”的解决办法
  12. 计算机二级能加几个创新创业学分,创新创业活动学分认定细则
  13. 大话Verilog——Verilog入门(一)
  14. Docker 部署深度学习 运行deeplabV3
  15. LaTex中表格常用设置
  16. c++继承和重用_重用实现–继承,组合和委派的演练
  17. 五脏排毒最简单有效的方法
  18. python爬虫之古诗词分类爬取加存储
  19. 【C++从入门到放弃】C++编译生成动态链接库*.so及如何调用*.so
  20. 1455: 罗马游戏

热门文章

  1. matlab 传递函数 频率特性曲线,[由频率特性数据获取传递函数参数的一种实现方法] 传递函数的频率特性...
  2. opencv--笔记——本征矩阵基础矩阵
  3. 威纶通触摸屏与台达变频器modbus通讯
  4. 【CodeVS】2750 心系南方灾区
  5. 隐私计算+区块链,助力数据可信治理实践
  6. TS基础知识(新手入门)
  7. Proteus 8仿真以及C51单片机广告灯的设计(C语言)实例
  8. 农产品如何引流?农产品如何做成爆品?农产品如何持续引流?
  9. 抖音海外版TikTok还能这样玩
  10. 金融帝国实验室(Capitalism Lab)官方中文整合包(MOD模组/专业XGQ)_v8.0.15(2022.04.03更新)