文章目录

  • 一、概念区别
  • 一、代码封装

一、概念区别

gzip是一种数据格式,默认且目前仅使用deflate算法压缩data部分;
deflate是一种压缩算法,是huffman编码的一种加强。deflate与gzip解压的代码几乎相同,可以合成一块代码。区别仅有:
deflate使用inflateInit(),而gzip使用inflateInit2()进行初始化,比 inflateInit()多一个参数: -MAX_WBITS,
表示处理raw deflate数据。因为gzip数据中的zlib压缩数据块没有zlib header的两个字节。使用inflateInit2时要求zlib库忽略zlib header。
在zlib手册中要求windowBits为8..15,但是实际上其它范围的数据有特殊作用,见zlib.h中的注释,如负数表示raw deflate。
Apache的deflate变种可能也没有zlib header,需要添加假头后处理。即MS的错误deflate (raw deflate).zlib头第1字节一般是0x78,
第2字节与第一字节合起来的双字节应能被31整除,详见rfc1950。
例如Firefox的zlib假头为0x7801,python zlib.compress()结果头部为0x789c。deflate 是最基础的算法,gzip 在 deflate 的 raw data 前增加了 10 个字节的 gzheader,
尾部添加了 8 个字节的校验字节(可选 crc32 和 adler32) 和长度标识字节。

一、代码封装

import org.apache.commons.lang3.StringUtils;import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.zip.Deflater;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import java.util.zip.Inflater;/*** @Title: CompressUtil* @Description:* @Author cw* @DateTime: 2022/12/30 10:45*/
public class CompressUtil {/*** 文本数据gzip压缩*/public static String gzipCompressString(String text) {if (StringUtils.isEmpty(text)) {return null;}ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();try (GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream)) {gzipOutputStream.write(text.getBytes(StandardCharsets.UTF_8));gzipOutputStream.flush();gzipOutputStream.finish();} catch (Exception e) {System.out.println(e);return null;}return Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray());}/*** 文本数据gzip解压*/public static String gzipDecompressString(String text) {if (StringUtils.isEmpty(text)) {return null;}ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(Base64.getDecoder().decode(text));try (GZIPInputStream gzipInputStream = new GZIPInputStream(byteArrayInputStream)){byte[] buffer = new byte[256];int len;while ((len = gzipInputStream.read(buffer)) != -1) {byteArrayOutputStream.write(buffer, 0, len);}}catch (Exception e){System.out.println(e);return null;}return byteArrayOutputStream.toString();}/*** 字节数组gzip压缩*/public static byte[] gzipCompressBytes(byte[] bytes) {ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();try (GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream)) {gzipOutputStream.write(bytes);gzipOutputStream.flush();gzipOutputStream.finish();} catch (Exception e) {System.out.println(e);return null;}return byteArrayOutputStream.toByteArray();}/*** @param bytes 待解压缩的字节数组* @return 解压缩后的字节数组* @throws IOException*/public static byte[] deflateDecompressBytes(byte[] bytes) throws IOException {int len = 0;Inflater infl = new Inflater();infl.setInput(bytes);ByteArrayOutputStream bos = new ByteArrayOutputStream();byte[] outByte = new byte[1024];try {while (!infl.finished()) {len = infl.inflate(outByte);if (len == 0) {break;}bos.write(outByte, 0, len);}infl.end();} catch (Exception e) {e.printStackTrace();} finally {bos.close();}return bos.toByteArray();}/*** 压缩.** @param bytes 待压缩的字节数组* @return 压缩后的数据* @throws IOException*/public static byte[] deflateCompressBytes(byte[] bytes) throws IOException {int len = 0;Deflater defl = new Deflater();defl.setInput(bytes);defl.finish();ByteArrayOutputStream bos = new ByteArrayOutputStream();byte[] outputByte = new byte[1024];try {while (!defl.finished()) {len = defl.deflate(outputByte);bos.write(outputByte, 0, len);}defl.end();} finally {bos.close();}return bos.toByteArray();}
}

参考文章:
https://www.php1.cn/detail/JAVA_ZhongDe_def_7c4ff3e8.html
https://blog.csdn.net/gehong3641/article/details/127079600
https://blog.csdn.net/iteye_6926/article/details/82649870

java实现deflate数据压缩和gzip数据压缩相关推荐

  1. java实现deflate算法

    转自:http://www.weixingon.com/s/java+deflate算法 想想一下,当你需要处理500TB的数据的时候,你最先要做的是存储下来.你是选择源文件存储呢?还是处理压缩再存储 ...

  2. Java实现10万条经纬度数据压缩后只有15k

    前言 项目中行程上报数据,一般在结束的时候上报,类似keep软件的跑步功能,点击开始,本地开始每一秒钟存储当前位置.方向.速度.温度等属性,点击结束,将这些数据一次性提交.考虑到一天就可能有86400 ...

  3. java网络传输压缩数据_Java数据压缩与传输实例Java源码

    [实例简介]Java数据压缩与传输实例Java源码 [实例截图] [核心代码] import java.net.*; import java.io.*; import java.util.zip.GZ ...

  4. java socket 二次发送_发过2次帖子,都没有了,再发。JAVA中SOCKET通信中的数据压缩问题...

    通信中要发大批量数据,发送前想进行压缩,发送完一段数据后要进行验证,然后才能继续发.我使用GZipInputStream和GZipOutputStream进行处理,但发送完一段数据后,调用zipout ...

  5. java实现deflate文件格式解压压缩

    什么是deflate? DEFLATE是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法. 它最初是由Phil Katz为他的PKZIP归档工具第二版所定义的, ...

  6. Java实现deflate算法的压缩和解压

    package com.huawei.cn;import java.io.*; import java.util.zip.DeflaterOutputStream; import java.util. ...

  7. mysql gunzip 远程,Java 操作mysql 导入|导出 gzip|gunzip 工具类

    package util; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import ...

  8. java 与 c gzip_zlib和gzip生成不同的数据

    我有一大堆数据应该是zlib压缩数据(我不是100%肯定) . 我首先尝试通过预先添加"1F 8B 08 00 00 00 00 00"来使用gzip解压缩它 . 就像在这个线程的 ...

  9. JDK(GZIP实现数据压缩)

    GZIP是什么? 数据压缩技术 目前常用的压缩算法有: GZIP,一个压缩比搞的慢速算法,压缩后的数据适合长期使用,JDK中的java.util.zip.GZIPInputStream/GZIPOut ...

  10. HADOOP与HDFS数据压缩格式

    HADOOP与HDFS数据压缩格式 1.cloudera 数据压缩的一般准则 一般准则 是否压缩数据以及使用何种压缩格式对性能具有重要的影响.在数据压缩上,需要考虑的最重要的两个方面是 MapRedu ...

最新文章

  1. 使用相机暗箱公式和透镜方程估计人脸距离
  2. 流行学习、流形学习家族、局部线性嵌入LLE、随机投影(Random Projection)、t-SNE降维及可视化
  3. Software Engineering at Google
  4. 数据库事务转载基础二:oracle事务隔离级别
  5. ARM-Button-Driver-硬件图
  6. php 自定义加密算法,php自定义加密函数、解密
  7. python函数的作用域_python学习第五篇 函数 变量作用域
  8. 大数据学习笔记:通过Java代码创建HBASE数据库
  9. RPC实现以及相关学习
  10. web网页上面调用qq
  11. ShardingSphere JDBC 语句执行初探
  12. mysql 重启爆红,MySQL 启动报错
  13. mysql2000清除挂起工具,安装SQL提示挂起操作解决方法
  14. 目标检测概述-VOC COCO数据集 IOU AP NMS
  15. 纽约市建筑能源得分预测代码分析
  16. 谷歌支付 googleplay API权限相关设置
  17. 用防火墙自动拦截攻击IP
  18. 面向对象的三大特征:封装、继承和多态的简单概述
  19. AsyncTask的优缺点
  20. AbpVnext 微服务 内部网关服务通讯 动态API客户端

热门文章

  1. Spring Boot 大文件上传(断点上传)、服务端分片下载、客户端分片下载(断点下载)
  2. linux 心脏滴血漏洞,漏洞bash近日“破壳”,当心再次“心脏出血”
  3. 二阶Volterra矩阵生成 matlab
  4. 什么是资产证券化 - 以及资产支持证券在实际中的应用
  5. linux的OOM killer
  6. unity 弹痕_Unity C# 用图片融合做弹孔
  7. php视频怎么转mp4,PHP实现将视频转成MP4并获取视频预览图的方法_php技巧
  8. 股票交易接口的开发工具?
  9. 中国大学慕课mooc毛概考试答案参考
  10. java毕业设计民航售票管理系统源码+lw文档+mybatis+系统+mysql数据库+调试