Deflater是同时使用了LZ77算法与哈夫曼编码的一个无损数据压缩算法。

依赖

 <dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.10</version></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.2</version></dependency>

代码实现

package utils;
import org.apache.commons.codec.binary.Base64;
import page.User;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.DataFormatException;
import java.util.zip.Deflater;
import java.util.zip.Inflater;/*** DeflaterUtils 压缩字符串*/
public class DeflaterUtils {/*** 压缩*/public static String zipString(String unzipString) {/**     https://www.yiibai.com/javazip/javazip_deflater.html#article-start*     0 ~ 9 压缩等级 低到高*     public static final int BEST_COMPRESSION = 9;            最佳压缩的压缩级别。*     public static final int BEST_SPEED = 1;                  压缩级别最快的压缩。*     public static final int DEFAULT_COMPRESSION = -1;        默认压缩级别。*     public static final int DEFAULT_STRATEGY = 0;            默认压缩策略。*     public static final int DEFLATED = 8;                    压缩算法的压缩方法(目前唯一支持的压缩方法)。*     public static final int FILTERED = 1;                    压缩策略最适用于大部分数值较小且数据分布随机分布的数据。*     public static final int FULL_FLUSH = 3;                  压缩刷新模式,用于清除所有待处理的输出并重置拆卸器。*     public static final int HUFFMAN_ONLY = 2;                仅用于霍夫曼编码的压缩策略。*     public static final int NO_COMPRESSION = 0;              不压缩的压缩级别。*     public static final int NO_FLUSH = 0;                    用于实现最佳压缩结果的压缩刷新模式。*     public static final int SYNC_FLUSH = 2;                  用于清除所有未决输出的压缩刷新模式; 可能会降低某些压缩算法的压缩率。*///使用指定的压缩级别创建一个新的压缩器。Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION);//设置压缩输入数据。deflater.setInput(unzipString.getBytes(StandardCharsets.UTF_8));//当被调用时,表示压缩应该以输入缓冲区的当前内容结束。deflater.finish();final byte[] bytes = new byte[512];ByteArrayOutputStream outputStream = new ByteArrayOutputStream(512);while (!deflater.finished()) {//压缩输入数据并用压缩数据填充指定的缓冲区。int length = deflater.deflate(bytes);outputStream.write(bytes, 0, length);}//关闭压缩器并丢弃任何未处理的输入。deflater.end();return Base64.encodeBase64String(outputStream.toByteArray());//处理回车符
//        return zipString.replaceAll("[\r\n]", "");}/*** 解压缩*/public static String unzipString(String zipString) {byte[] decode = Base64.decodeBase64(zipString);//创建一个新的解压缩器  https://www.yiibai.com/javazip/javazip_inflater.htmlInflater inflater = new Inflater();//设置解压缩的输入数据。inflater.setInput(decode);final byte[] bytes = new byte[512];ByteArrayOutputStream outputStream = new ByteArrayOutputStream(512);try {//finished() 如果已到达压缩数据流的末尾,则返回true。while (!inflater.finished()) {//将字节解压缩到指定的缓冲区中。int length = inflater.inflate(bytes);outputStream.write(bytes, 0, length);}} catch (DataFormatException e) {e.printStackTrace();return null;} finally {//关闭解压缩器并丢弃任何未处理的输入。inflater.end();}try {return outputStream.toString("UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();return null;}}public static void main(String[] args) {List<User> userList = new ArrayList<>();userList.add(new User(1,1,"北京11"));userList.add(new User(2,2,"北京22"));String json = GsonUtil.bean2Json(userList);System.out.println("压缩前:"+json);String json1 = DeflaterUtils.zipString(json);System.out.println("压缩后:"+json1);String json2 = DeflaterUtils.unzipString(json1);System.out.println("解压后:"+json2);}
}

执行结果

总结

压缩前的字节长度为:1825
压缩后的字节长度为:284
压缩率为63.73%,压缩后体积为原来的36.27%

Deflater压缩算法相关推荐

  1. 压缩算法:字符串(JSON)压缩和解压【JDK之Deflater压缩与Inflater解压】

    Deflater 是使用了LZ77算法与哈夫曼编码的一个无损数据压缩算法. Java 提供的 Deflater 和 Inflater 类对 json 进行压缩和解压缩,下面是工具类: package ...

  2. Java不同压缩算法的性能比较

    转载自 http://www.importnew.com/14410.html 本文将会对常用的几个压缩算法的性能作一下比较.结果表明,某些算法在极端苛刻的CPU限制下仍能正常工作. 文中进行比较的算 ...

  3. 今天找压缩算法,看到一段陈年往事

    此文章转载自2004.10的<大众软件>,原作者为 广东 GZ 前言--王者归来? 等待足足两年之久,压缩霸主WinZip终于在万众期待下发布了9.0正式版.全世界自然一片沸腾,在世界各大 ...

  4. 手机上的算法优化 —— 内存压缩算法

    [前言] 随着手机APP的升级,手机的内存也越来越大,在有限的内存空间里存放更多的数据,成为了对developer的挑战,接下来我会介绍一下内存中最常使用的几种算法,并剖析一下适合的使用场景. 由于鄙 ...

  5. 5种数据压缩算法实现和性能测试

    目录 算法实现 Deflate GZIP LZO LZ4 Snappy 数据压缩算法性能测试 准备工作 测试 压缩算法原理可看我上一篇文章:数据压缩算法原理 算法实现 Deflate 一个基于LZ77 ...

  6. 字节跳动开源最新GAN压缩算法,算力消耗可减少至1/46

    字节跳动近期开源了一项代号为OMGD的压缩技术.这是字节自研的GAN(生成对抗网络)压缩算法,在保证生成效果不变的前提下,算力消耗最低可以减少到原来的1/46,相比之前业界的最佳压缩效果提升一倍多.据 ...

  7. 你发表情包全靠他,GIF压缩算法发明者之一获IEEE最高荣誉奖

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要5分钟 Follow小博主,每天更新前沿干货 转载自:量子位 现年90岁的以色列科学家Jacob Ziv,获得了2021年IEEE荣誉奖章(I ...

  8. gzip压缩算法: gzip 所使用压缩算法的基本原理

    gzip压缩算法: gzip 所使用压缩算法的基本原理_凡间_百度空间 gzip压缩算法: gzip 所使用压缩算法的基本原理 1 gzip 所使用压缩算法的基本原理 gzip 对于要压缩的文件,首先 ...

  9. 简单的BMCP位图图片压缩算法

    此算法并不高深,各位专业人士可以飘过了Orz.并且如果各位知道一些图片格式与压缩算法的话,从中应该可以看到一些相似的"影子". PS:本人非专业人士,以下有说错的敬请各位谅解:) ...

最新文章

  1. 智慧城市建设:科技创业的下一个浪潮
  2. 系统优化怎么做-SQL优化
  3. java对密码进行加密的方法_如何在JAVA中使用MD5加密对密码进行加密
  4. REDHAT6.3 udev 配置 存储器磁盘
  5. android webview 截图,Android获取webView快照与屏幕截屏的方法 -电脑资料
  6. centos将某一目录权限给用户_centos7如何新建普通权限用户,仅能访问指定目录,使用gcc?...
  7. php中的变量函数,PHP中的一些路径变量或函数
  8. 《ggplot2:数据分析与图形艺术》,读书笔记
  9. linux i o端口编程,linux 操作 I/O 端口
  10. zookeeper集群节点热扩容和迁移详解
  11. pycharm 无法安装模块 nothing to show
  12. linux下连接mysql数据库命令,linux连接mysql命令
  13. 联想服务器修改显存,如何调整用于显卡的共享内存
  14. IT人士如何提高软件下载的速度
  15. ZUI框架加上Flex布局构建登录后的主页
  16. 怎么用python骂人_人生苦短我用Python,本文助你快速入门
  17. 磐石云服务器_超牛的盘石云服务器平台
  18. win10+睡眠+计算机命令,win10关闭休眠命令,win10关闭睡眠模式命令
  19. VC++6.0英文原版+MSDN6.0下载(ISO格式)
  20. ctfshow 网络迷踪-你的名字+噶即正义

热门文章

  1. osg 瞄准镜 车窗镜 透视镜片 做法
  2. win10 无法删除 注册表 蓝牙_教你win10蓝牙图标删除不了的解决方法
  3. audacity VS2010 工程搭建
  4. 关于 mPaaS PB 接入模式适配 64 位 CPU 架构中项目报错解决方案
  5. [noip模拟赛2017.7.4]
  6. cocos creator教程【打造路径编辑系统】
  7. 生存类html5小游戏,紧张绝望!刺激爽爆!盘点最好玩的PC生存类游戏(中)
  8. [VOT12](2017CVPR) CSR-DCF: Discriminative Correlation Filter Tracker with Channel and Spatial
  9. 配置一个ubuntu,任我玩耍任我游 (三)
  10. 【知识点】增量式编码器的工作原理和使用方法