`
yu120
  • 浏览: 81542 次
社区版块
存档分类
最新评论

Java实现数据压缩---ZLib压缩工具

    博客分类:
  • Java
阅读更多
package cn.wiki.openapi.lry.tool;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream;

/**
 * Java实现数据压缩
 * ZLib压缩工具
 * @author lry
 *
 */
public abstract class ZLibUtils {

	/**
	 * 压缩
	 * 
	 * @param data
	 *            待压缩数据
	 * @return byte[] 压缩后的数据
	 */
	public static byte[] compress(byte[] data) {
		byte[] output = new byte[0];

		Deflater compresser = new Deflater();

		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;
	}

	/**
	 * 压缩
	 * 
	 * @param data
	 *            待压缩数据
	 * 
	 * @param os
	 *            输出流
	 */
	public static void compress(byte[] data, OutputStream os) {
		DeflaterOutputStream dos = new DeflaterOutputStream(os);

		try {
			dos.write(data, 0, data.length);

			dos.finish();

			dos.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 解压缩
	 * 
	 * @param data
	 *            待压缩的数据
	 * @return byte[] 解压缩后的数据
	 */
	public static byte[] decompress(byte[] data) {
		byte[] output = new byte[0];

		Inflater decompresser = new Inflater();
		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;
	}

	/**
	 * 解压缩
	 * 
	 * @param is
	 *            输入流
	 * @return byte[] 解压缩后的数据
	 */
	public static byte[] decompress(InputStream is) {
		InflaterInputStream iis = new InflaterInputStream(is);
		ByteArrayOutputStream o = new ByteArrayOutputStream(1024);
		try {
			int i = 1024;
			byte[] buf = new byte[i];

			while ((i = iis.read(buf, 0, i)) > 0) {
				o.write(buf, 0, i);
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
		return o.toByteArray();
	}
	public static void main(String[] args) {
		 System.out.println("字节压缩/解压缩测试");  
	     String inputStr = "站搜啊的说得很好snowolf@zlex.org;dongliang@zlex.org;zlex.dongliang@zlex.org";  
	     System.out.println("输入字符串:" + inputStr);  
	     byte[] input = inputStr.getBytes();  
	     System.out.println("输入字节长度:" + input.length);  
	  
	     byte[] data = ZLibUtils.compress(input);  
	     System.out.println("压缩后字节长度:" + data.length);  
	  
	     byte[] output = ZLibUtils.decompress(data);  
	     System.out.println("解压缩后字节长度:" + output.length);  
	     String outputStr = new String(output);  
	     System.out.println("输出字符串:" + outputStr);  
	}
}

 

分享到:
评论

相关推荐

    java解压zlib和压缩zlib的jar

    java解压zlib和压缩zlib的jar

    zlib-1.2.13 rpm 安装包

    修复当使用 Z_FIXED 参数时块类型选择的错误,现在将选择最小的块类型,以实现更好的压缩效果。 修复了参数 CC 配置不生效的问题。 对 CRC 函数提供了正确的输入参数,以缓解 Java 中的一个漏洞。 修复了新的 CRC ...

    zlib-1.1.4-1-src_zlib_zlib-1.1.4-1_

    DEFLATE算法在zlib中的实现既考虑了压缩速度,也兼顾了解压缩的效率。 在源代码包`src`中,你会找到所有必要的C语言源文件和头文件,包括核心压缩和解压缩函数,以及与不同平台兼容性的适配代码。开发者可以将这些...

    zlib-1.2.11.tar.gz

    总的来说,zlib是一个强大且不可或缺的工具,它为各种应用程序提供了数据压缩能力,从而提高了效率、节省了存储空间,并在一定程度上改善了网络传输性能。在开发过程中,了解并熟练使用zlib,对于优化软件性能和用户...

    前端开源库-node-zlib-backport

    `zlib`是Python、C++、Java等多语言中的一个通用数据压缩库,它实现了多种压缩算法,如Deflate、Gzip和Zlib等。在Node.js中,`zlib`模块提供了强大的数据压缩和解压缩功能,然而,由于Node.js的异步特性,其大部分...

    zlib-1.2.8-win32-x86

    对于zlib-1.2.8-win32-x86,此文件夹可能包含已编译的zlib压缩和解压缩工具,如`zlib1.dll`,开发者和用户可以直接使用它们进行数据压缩和解压缩操作。 2. **include** 文件夹:这是开发者的重要资源,包含了zlib库...

    zlib源代码和rpm安装包

    zlib库不仅支持数据压缩,还提供了数据解压缩的功能,适用于多种编程语言,如C、C++、Java等。 **二、zlib的核心功能** 1. **数据压缩算法**:zlib采用了DEFLATE压缩算法,这是一种结合了LZ77滑动窗口压缩和霍夫曼...

    java zlib zip gzip

    Java中的Zlib、Zip和Gzip是三种广泛使用的数据压缩库和格式,它们在软件开发,尤其是处理数据传输和存储时扮演着重要角色。这里我们将深入探讨这些技术及其在Java环境中的应用。 **Zlib**: Zlib是一个开源的库,...

    java压缩字符串

    java压缩字符串

    使用ZLIB库压缩解压源码(支持多级文件目录)

    在IT行业中,压缩和解压缩数据是常见的任务,特别是在存储和传输大量数据时。...通过理解和使用ZLIB库,开发者可以创建自己的压缩和解压缩工具,满足特定需求,比如在游戏开发、文件传输或数据存储等领域。

    Delphi 流数据的压缩与解压

    在Delphi中,你可以使用TZStream或TZOutputStream等类来实现ZLib压缩。例如,你可以创建一个TMemoryStream对象来装载原始数据,然后通过TZOutputStream将这个内存流压缩到另一个TMemoryStream中。 解压过程与压缩...

    C#、java 字符流跨平台数据解压缩

    由于项目需求,需要在C#中压缩,然后在java里解压缩,或者倒过来,在Java里压缩,C#里解压缩,以下代码经测试验证通过。 关键技术点和体会: 压缩的结果采用Base64编码,方便在Java端或者C#端打印出来调试,也方便...

    zlib的安装与使用

    3. **软件开发**:许多编程语言和框架(如Python、Java、.NET)内建了对zlib的支持,用于数据压缩和解压缩。 4. **图像和文档格式**:PNG图像格式和PDF文档格式都使用了zlib进行数据压缩。 总结,zlib是一个强大的...

    zlib-1.2.11-x86-x64-debug-release-vc14.zip

    【zlib-1.2.11-x86-x64-debug-release-vc14.zip】这个压缩包文件包含了Zlib库的多个版本和配置,适用于x86和x64...Zlib的高效和跨平台特性使其成为开发者的首选工具之一,尤其在需要处理大量数据流或文件压缩的场景下。

    zlib压缩源码

    总的来说,zlib压缩库以其高效、稳定和灵活的特性,成为数据压缩领域的首选工具。通过JNI,开发者可以充分利用其优势,实现在Android平台上的原生代码优化。理解和掌握zlib的使用方法,对于提升应用程序的性能和功能...

    J2ME环境下基于ZLIB的数据压缩与解压缩.pdf

    本文深入探讨了J2ME环境下基于ZLIB的数据压缩与解压缩技术,分析了ZLIB算法原理及其在J2ME平台的适配方案,详细阐述了数据压缩的实现流程。通过JZlib包的引入和修改,克服了J2ME在数据压缩功能上的不足,为移动设备...

    ajax+pako.js实现gzip数据压缩上传,解决post数据过长问题

    以下将详细讲解如何利用ajax和pako.js实现gzip数据压缩上传。 首先,理解gzip压缩原理。gzip是一种广泛使用的数据压缩算法,它基于DEFLATE算法,能有效减少文件大小,提高网络传输效率。在Web应用中,服务器通常...

    java Zlib算法!!!!!

    java zlib压缩算法资源,懒的写了,看看多少字了

    vc中用来解压缩Java中gzip压缩的数据的解压缩库

    总之,通过引入Zlib库,VC开发者可以方便地在C++环境中处理Java中gzip压缩的数据,实现跨语言的数据交换和处理。这个库的强大功能不仅限于gzip,还包括其他多种压缩和解压缩格式,是C++开发中处理压缩数据的重要工具...

    用Deflater与Inflater实现字节的压缩与解压

    在Java编程语言中,Deflater和Inflater是两个重要的类,它们分别用于数据的压缩和解压缩,基于Zlib库实现。这两个类广泛应用于处理字节流,比如在网络传输或者存储大量数据时,压缩数据可以有效地节省空间。接下来,...

Global site tag (gtag.js) - Google Analytics