基于zlibCompress + Base64实现字符串与二维码的生成和恢复

简介: 文章介绍了如何使用zlib进行数据压缩和解压缩,以及如何结合Base64编码解码来生成和恢复包含压缩数据的二维码。

一、zlibCompress数据压缩

public static byte[] zlibCompress(byte[] data) {
    byte[] output;

    //LEVEL 5 to make it the same as iOS COMPRESSION_ZLIB
    Deflater compresser = new Deflater(5,true);

    compresser.reset();
    compresser.setInput(data);
    compresser.finish();
    ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length);
    try {
        byte[] buf = new byte[1024];
        while (!compresser.finished()) {
            int i = compresser.deflate(buf);
            bos.write(buf, 0, i);
        }
        output = bos.toByteArray();
    } catch (Exception e) {
        output = data;
        e.printStackTrace();
    } finally {
        try {
            bos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    compresser.end();
    return output;
}
AI 代码解读

二、zlibCompress数据解压缩

public static byte[] zlibDecompress(byte[] data) {
    byte[] output;

    Inflater decompresser = new Inflater(true);
    decompresser.reset();
    decompresser.setInput(data);

    ByteArrayOutputStream o = new ByteArrayOutputStream(data.length);
    try {
        byte[] buf = new byte[1024];
        while (!decompresser.finished()) {
            int i = decompresser.inflate(buf);
            o.write(buf, 0, i);
        }
        output = o.toByteArray();
    } catch (Exception e) {
        output = data;
        e.printStackTrace();
    } finally {
        try {
            o.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    decompresser.end();
    return output;
}
AI 代码解读

三、二维码的生成和恢复

//decompress

String str = result.substring(AppConstants.WatchWallet.PREFIX_SIGN.length());

byte[] decodedBytes = android.util.Base64.decode(str.getBytes("UTF-8"), Base64.NO_WRAP);
qrstr_decoded = new String(StringUtils.zlibDecompress(decodedBytes));


//compress
byte[] encodedBytes = Base64.encode(StringUtils.zlibCompress(jsonstr.getBytes("utf-8")), Base64.NO_WRAP);
mQrcodeMvpPresenter.createQrcode(AppConstants.WatchWallet.PREFIX_SIGN + new String(encodedBytes));
AI 代码解读

四、代码下载

点击下载

目录
打赏
0
0
0
0
11
分享
相关文章
VUE3(三十六)压缩base64格式图片
VUE3(三十六)压缩base64格式图片
683 0
oracle日期加减的三种方式
【8月更文挑战第15天】在Oracle数据库中,可通过三种方式对日期进行加减操作:一是利用`ADD_MONTHS`函数增减月份,如`ADD_MONTHS(SYSDATE, 2)`表示两个月后;二是运用算术运算符直接加减天数,如`SYSDATE + 7`表示七天后;三是采用`INTERVAL`表达式增加或减少特定时间间隔,如`SYSDATE + INTERVAL '2' YEAR`表示两年后。这些方法可根据实际需求灵活选用。
3926 5
MySQL操作利器大公开!这几款客户端让你事半功倍
本文介绍了多种MySQL数据库管理工具,包括命令行工具、图形化用户界面(GUI)工具和Web界面工具。主要工具有: 1. **Navicat for MySQL**:功能强大,支持多种数据库管理任务,但需付费。 2. **DBeaver**:开源免费,支持多种数据库,安装包较大。 3. **MySQL Workbench**:官方提供的图形化工具,适合MySQL全家桶用户。 4. **HeidiSQL**:轻量级Windows客户端,简单易用。 5. **phpMyAdmin**:基于Web的管理工具,易于部署和使用。 6. **SQLyog**:适用于Windows,功能丰富,有免费
950 3
Base64如何切割后面的内容,如何提取data:image/png;base64,之后的内容,Vue中.split中截取的数组如何使用数组进行获取
Base64如何切割后面的内容,如何提取data:image/png;base64,之后的内容,Vue中.split中截取的数组如何使用数组进行获取
不知几DAY的Symfony---RCE复现
Symfony是一个开源的PHP Web框架,它现在是许多知名 CMS 的核心组件,例如Drupal、Joomla! 此文演示了该框架存在的一个RCE漏洞
不知几DAY的Symfony---RCE复现
Java线程池ThreadPoolExcutor源码解读详解09-4种拒绝策略
本文介绍了线程池的四种拒绝策略:AbortPolicy、DiscardPolicy、DiscardOldestPolicy和CallerRunsPolicy,并通过代码示例展示了它们在任务过多时的不同处理方式。AbortPolicy会抛出异常并停止主线程;DiscardPolicy会默默丢弃新任务;DiscardOldestPolicy会抛弃队列中最旧的任务来接纳新任务;而CallerRunsPolicy则是由调用者线程执行被拒绝的任务,以减缓新任务的提交速度。这四种策略适用于不同的场景,开发者可以根据需求选择合适的策略。
1216 5
IntelliJ IDEA配置git工作效率翻倍
IntelliJ IDEA 是一个强大的集成开发环境,用于编程语言如 Java、Kotlin、Scala 和其他多种语言。Git 是一个开源的分布式版本控制系统,用于追踪项目过程中的代码变更。
650 0
IntelliJ IDEA配置git工作效率翻倍
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问