Deflater与Inflater的压缩与解压缩

简介: 原文: Deflater与Inflater的压缩与解压缩 package util; import java.util.Arrays; import java.
原文: Deflater与Inflater的压缩与解压缩

package util;

import java.util.Arrays;
import java.util.zip.Deflater;
import java.util.zip.Inflater;

import org.apache.commons.codec.binary.Base64;


public class StringZlibUtil {

	/**
	 * 用zlib压缩
	 * @param message
	 * @return
	 * @throws Exception
	 */
	public static byte[] zlibCompress(String message)throws Exception
	{
		String chatacter="UTF-8";
		byte[] input = message.getBytes(chatacter);
		System.out.println("input length "+input.length);
	    byte[] output = new byte[input.length+10+new Double(Math.ceil(input.length*0.25f)).intValue()];
	    System.out.println(output.length);
	    Deflater compresser = new Deflater();
	    compresser.setInput(input);
	    compresser.finish();
	    int compressedDataLength = compresser.deflate(output);
	    System.out.println("compressedDataLength "+compressedDataLength);
	    compresser.end();	    
	    //String ostr=new String(output,0,compressedDataLength,chatacter);
	    //System.out.println("out str "+ostr);
	    return Arrays.copyOf(output, compressedDataLength);
	}
	/**
	 * 解压缩
	 * @param barr   需要解压缩的字节数组
	 * @param charater  对应压缩时的编码方式
	 * @return
	 * @throws Exception
	 */
	public static byte[] zlibInfCompress(byte[] barr,String charater)throws Exception{
		byte[] result=new byte[2014];
		Inflater inf=new Inflater();
		inf.setInput(barr);
		int infLen=inf.inflate(result);
		inf.end();
		String strOgr=new String(result,charater);
		System.out.println("str ogr "+strOgr);
		return Arrays.copyOf(result, infLen);
	}
	public static void main(String[] args)throws Exception{
		
		String str="abcde|qqqqqqqqqqqqqqq|wwwwwwwwwwwwwwwwwwww";
		//方法一:
		/*byte[] def=StringZlibUtil.zlibCompress(str);
		byte[] inf=StringZlibUtil.zlibInfCompress(def, "UTF-8");
		String strOgr=new String(inf,"UTF-8");
		System.out.println("str org main "+strOgr);*/
		
		//方法二:以下是使用基本base64的编码与解码
		byte[] def=StringZlibUtil.zlibCompress(str);
		String strBase=Base64.encodeBase64String(def);
		System.out.println("str base64 string "+strBase);
		byte[] decStr=Base64.decodeBase64(strBase);
		byte[] decode_str=StringZlibUtil.zlibInfCompress(decStr, "UTF-8");
		String decStrOgr=new String(decode_str,"UTF-8");
		System.out.println("decStrOgr "+decStrOgr);
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

目录
相关文章
计算机中存储单位的换算
计算机中存储单位的换算
|
缓存 Ubuntu Linux
LXC (Linux 虚拟环境)简单介绍
LXC是Linux containers的简称,操作系统级别的虚拟化技术。它可以在操作系统层次上为进程提供的虚拟的执行环境。一个虚拟的执行环境被称为一个容器(container)。可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络、pid、ipc、mnt、uts)。
1578 0
LXC (Linux 虚拟环境)简单介绍
|
前端开发 Java 数据库
Java一分钟之-Spring WebFlux:响应式编程
【6月更文挑战第16天】Spring WebFlux是Spring Framework 5中的非阻塞Web框架,采用Reactor和响应式编程,支持在Netty等服务器上运行。它提供非阻塞IO和函数式路由,提升并发性能。常见问题包括阻塞操作误用、背压处理不当和对响应式编程理解不足。通过代码示例展示了如何设置路由和处理器函数。学习和实践Spring WebFlux有助于开发高性能Web应用。
687 8
|
算法 搜索推荐
数据结构与算法学习十八:堆排序
这篇文章介绍了堆排序是一种通过构建堆数据结构来实现的高效排序算法,具有平均和最坏时间复杂度为O(nlogn)的特点。
428 0
数据结构与算法学习十八:堆排序
|
Oracle 关系型数据库 MySQL
深入OceanBase内部机制:多租户架构下的资源隔离实现精讲
深入OceanBase内部机制:多租户架构下的资源隔离实现精讲
|
弹性计算 编解码 负载均衡
阿里云飞天洛神2.0:开放弹性的云网络NFV平台
作为飞天系统的核心组件,洛神平台支撑了超大规模租户、超大规模虚拟机的高性能云网络。其中洛神2.0 NFV平台的定位是构建通用、灵活的平台能力,降低业务网元NFV化的门槛和成本,实现了复杂业务网元超高的灵活性和弹性。
5584 0
阿里云飞天洛神2.0:开放弹性的云网络NFV平台
|
机器学习/深度学习 人工智能 自然语言处理
Transformer面试题总结101道
Transformer面试题总结101道
1911 0
|
IDE 前端开发 搜索推荐
5款超好用的在线IDE,媲美vscode,可以直接编写前端构建化项目,而无需在本地下载依赖包,非常适合学习、demo、原型开发
5款超好用的在线IDE,媲美vscode,可以直接编写前端构建化项目,而无需在本地下载依赖包,非常适合学习、demo、原型开发
6664 0
|
存储 缓存 网络协议
RH358管理DNS和DNS服务器--使用Unbound配置缓存名称服务器
RH358管理DNS和DNS服务器--使用Unbound配置缓存名称服务器
1363 0
RH358管理DNS和DNS服务器--使用Unbound配置缓存名称服务器
|
Kubernetes 监控 负载均衡
构建基于Spring Cloud向Service Mesh框架迁移的解决方案及思路
作为新一代微服务架构体系,Service Mesh 技术有效地解决了 Spring Cloud 微服务架构和服务治理过程中的痛点问题,一经推出便引起了很大的反响。今天我们就针对构建基于 Spring Cloud 向 Service Mesh 框架迁移过程中的诸多问题展开讨论,尽可能提供一套完善的解决方案和迁移思路,供大家参考。
1147 2
构建基于Spring Cloud向Service Mesh框架迁移的解决方案及思路

热门文章

最新文章