1、字符串压缩作用:

减轻传输压力
简单加密传输内容

2、压缩算法进行字符串压缩测试效率对比结果

deflater > gzip

3、常用加密工具方法demo

deflater压缩工具类

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.output.ByteArrayOutputStream;import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
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;}}
}

gzip 压缩工具类

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;/*** 推荐gzip*/
public class ZipUtils {/*** 使用gzip进行压缩*/public static String gzip(String primStr) {if (primStr == null || primStr.length() == 0) {return primStr;}ByteArrayOutputStream out = new ByteArrayOutputStream();GZIPOutputStream gzip = null;try {gzip = new GZIPOutputStream(out);gzip.write(primStr.getBytes());} catch (IOException e) {e.printStackTrace();} finally {if (gzip != null) {try {gzip.close();} catch (IOException e) {e.printStackTrace();}}}return new sun.misc.BASE64Encoder().encode(out.toByteArray());}/*** <p>Description:使用gzip进行解压缩</p>** @param compressedStr* @return*/public static String gunzip(String compressedStr) {if (compressedStr == null) {return null;}ByteArrayOutputStream out = new ByteArrayOutputStream();ByteArrayInputStream in = null;GZIPInputStream ginzip = null;byte[] compressed = null;String decompressed = null;try {compressed = new sun.misc.BASE64Decoder().decodeBuffer(compressedStr);in = new ByteArrayInputStream(compressed);ginzip = new GZIPInputStream(in);byte[] buffer = new byte[1024];int offset = -1;while ((offset = ginzip.read(buffer)) != -1) {out.write(buffer, 0, offset);}decompressed = out.toString();} catch (IOException e) {e.printStackTrace();} finally {if (ginzip != null) {try {ginzip.close();} catch (IOException e) {}}if (in != null) {try {in.close();} catch (IOException e) {}}if (out != null) {try {out.close();} catch (IOException e) {}}}return decompressed;}
}

字符串压缩、解压算法相关推荐

  1. Java 字符串压缩/解压【开发记录】

    1.场景:由于数据库字段长度有限,并且不能随意的修改数据库字段的配置,数据库的某个字段设置的长度可能在设置初期是满足需求的,后期由于业务变更或业务量增大导致该字段存储的数据增长,落库时可能因为该字段数 ...

  2. RLE压缩解压算法的完整实现

    和第四题一样同样是各种东拼西凑的结果,希望对一部分人有帮助.要用的话请至少改一下变量名和函数顺序并且搞懂为什么,不要直接抄袭.在此感谢陈德创大佬的无私帮助以及陈万庆老师提供的音频测试文件 看之前请先搞 ...

  3. Java 字符串 压缩 解压

    实现字符串的压缩和解压功能 需要导入的jar import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; im ...

  4. 文件压缩c语言程序代码,C语言程序设计之RLE压缩解压算法

    先介绍一下RLE压缩算法: 游程编码(Run-Length Encoding, RLE)又称行程长度编码或者变动长度编码法,在控制理论中对于二值图像而言是一种编码方法,对连续的黑,白向像素以不同的码字 ...

  5. php案例:字符串压缩解压

    作者:陈业贵 华为云享专家 51cto(专家博主 明日之星 TOP红人) 阿里云专家博主 文章目录 cyg.php cyg.php <?php $test_string="13545a ...

  6. 字符串GZIP压缩解压

    c# /// <summary>/// 字符串压缩解压/// </summary>public class Zipper{public static string Compre ...

  7. 【分享】AspxZip v2.0 在线压缩解压ZIP文档

    下载地址: http://download.csdn.net/detail/rrrfff/5756977 当前版本:2.0.20140609 AspxZip v2.0 特点: 1.能够在支持 ASP. ...

  8. Java 压缩解压字符串(支持中文)

    public static void main(String[] args) throws Exception{ String str ="xflush3.0个人感觉最大的特点就是监控配置非 ...

  9. c# rar解压大小_Linux压缩解压指令-bzip2、xz、compress、rar

    前面已经进介绍过Linux中用到的归档程序tar,文件压缩解压程序gzip.zip,今天继续介绍另外四种常见的压缩程序bzip2.compress.xz.rar. 文件压缩 bzip2 bzip2采用 ...

  10. JPEG图像压缩解压算法——C++实现

    兹于2017年11月,应<多媒体技术基础>课程实验的要求,本人就基于JPEG图像压缩解压算法做了较为深入的理解,用C++语言实现JPEG图像压缩解压算法. JPEG图像压缩解压算法 一.实 ...

最新文章

  1. tessorflow基本语法
  2. C++ Iterators(迭代器)
  3. C语言重难点总结:指针
  4. linux 下wn725无线网卡驱动,TL-WN725N V3无线网卡驱动移植与wireless工具wpa_supplicant-2.6...
  5. matplotlib -work4
  6. 《Scala机器学习》一一
  7. HDU ACM 3986 Harry Potter and the Final Battle(邻接表实现最短路dijkstra堆优化记录路径 + 枚举最短路上每条边)...
  8. 使用WebSockets搭建多人在线聊天室
  9. Python深度学习笔记(三)二分类模型
  10. html设置文字在背景图上,css如何实现文字在背景图片之上 css实现文字在背景图片之上代码...
  11. Elasticsearch - JNA
  12. 如何用ChatGPT做新品上市推广方案策划?
  13. 用C语言做一个迷宫小游戏
  14. sqlserver找不到存储过程
  15. pairs和iparis
  16. PHP学习----换行符
  17. 【python 接口开发】如何用python开发自己的接口
  18. Feign客户端异常IOException: Incomplete output stream解决方案
  19. 接口测试系列之 —— 前端交互测试和后端逻辑测试
  20. 包头师范学院计算机系,包头师范学院数学科学学院

热门文章

  1. 2011国信蓝点杯全国软件设计大赛
  2. python 排列组合函数_Python概率统计(1):排列组合
  3. R语言求风险价值VaR Value at Risk
  4. 百度秘密研发推荐引擎技术 2011年组建百人团队
  5. C++ 因数分解(X * Y)
  6. DirectX11+vs2010环境配置
  7. windows对象的属性
  8. dj java实现_OpenJFX DJ 风格 Java 桌面音乐播放器
  9. 华为服务器系统管理,WEB界面轻松搞定服务器管理--iMana华为服务器内置的Web管理系统...
  10. C语言stdlib.h常用方法