package com.hisuper.utils;
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;
/**
* ZLib压缩工具
*
* @author dhdu@qq.com
* @version 1.0
* @since 1.0
*/
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();
}
}
分享到:
相关推荐
**zlib压缩工具详解** 在IT领域,数据压缩是一种常见的技术,用于减小文件或数据流的大小,以便更有效地存储或传输。zlib库是一个广泛使用的开源压缩库,由Jean-loup Gailly和Mark Adler开发,它提供了对DEFLATE...
Zlib压缩解压工具是一款基于Zlib库的实用程序,用于对数据进行高效压缩和解压缩。Zlib是由Jean-loup Gailly和Mark Adler开发的开源库,它广泛应用于各种软件开发,尤其是在网络传输和文件存储方面。该工具特别适合...
在IT行业中,压缩技术是数据存储和传输领域...通过Python的`zlib`模块,我们可以轻松地对文件进行压缩和解压缩,创建自己的压缩工具,满足日常的文件处理需求。了解和掌握这些知识,将有助于提升在IT领域的技能和效率。
1. **Offzip**:这是一款基于zlib的命令行解压缩工具,用于处理使用zlib压缩算法的文件。用户可以通过命令行参数指定操作,如解压文件、查看压缩文件内容等。在Windows 7系统下,如果图形界面(GUI)不可用,Offzip...
**zlib压缩原理** zlib库采用的是DEFLATE压缩算法,该算法结合了LZ77(Lempel-Ziv)预测和霍夫曼编码(Huffman Coding)两种技术。LZ77用于查找文本中的重复模式并创建长度和距离的编码,而霍夫曼编码则是一种可变...
【zlib压缩算法详解】 zlib是一个开源的压缩库,广泛应用于数据压缩,如gzip、zlib自身以及图像格式PNG中。这些工具和格式都基于deflate算法,一种结合了LZ77(Lempel-Ziv)和Huffman编码的高效压缩方法。 **...
一些工具类代码块的标准代码: 压缩, return byte[] 压缩后的数据 解压缩, return byte[] 解压缩后的数据
标题"**C++使用zlib压缩和解压文件**"所涉及的核心知识点包括: 1. **C++编程**:使用C++进行文件操作,包括读取、写入和流处理。 2. **zlib库**:zlib是一个开源的压缩库,支持多种压缩和解压缩算法,如GZIP和...
本项目“C++ 基于ZLIB压缩库的数据或文件的压缩与解压缩小程序”正是利用了ZLIB库来实现这个功能。 ZLIB库是基于DEFLATE算法的,这是一种混合了LZ77(一种字典压缩方法)和霍夫曼编码(一种熵编码方法)的高效压缩...
根据提供的文件信息,本文将详细解释与zlib压缩算法相关的知识点。这包括zlib压缩算法的基本概念、工作原理以及在实际编程中的应用示例。 ### zlib压缩算法简介 zlib是一个广泛使用的数据压缩库,它提供了高效的...
2. `zlib-1.3.1.tar.xz`:这个文件则是先用tar打包,然后使用xz压缩工具进行了压缩。xz提供了更高的压缩比,但解压缩速度相对较慢。选择`.xz`格式可能是为了在可用磁盘空间有限的情况下提供更小的文件大小。 3. `...
封装的java zlib压缩工具,可以方面快速的实现压缩功能
`zlib`库是一个广泛使用的开源压缩库,它提供了强大的数据压缩和解压缩功能,但默认情况下并不直接支持对多级文件夹的压缩。针对这一限制,你提到的项目通过自定义方法实现了对多级文件夹的压缩,这在处理包含多个子...
在这个“QT4.7 + ZLIB压缩解压测试工程”中,开发者可能创建了一个实例,演示了如何在QT4.7环境下集成和使用ZLIB库进行文件或数据的压缩与解压。以下是这个项目可能涉及的关键知识点: 1. **ZLIB库的集成**:首先,...
标题中的“pb做zlib压缩解压”指的是使用PowerBuilder(简称pb)这一编程工具,结合zlib库来实现数据的压缩与解压缩功能。在IT行业中,PowerBuilder是一种广泛使用的面向对象的可视化开发工具,尤其适用于构建数据库...
"PB使用Zlib压缩BLOB"这个主题就是关于如何在PowerBuilder应用中利用Zlib库来压缩和解压缩BLOB数据的方法。 Zlib是一个开源的、跨平台的数据压缩库,广泛应用于多种编程语言和系统中。它提供了一套高效且灵活的API...
本文将深入探讨“z_file.rar_.Z压缩_z-file_zlib_zlib 压缩文件_文件压缩”这一主题,主要关注.z压缩、z-file、zlib以及zlib压缩文件的相关知识点。 首先,我们来看“.z”压缩格式。这是一种较早的文件压缩格式,...
**zlib压缩算法**是一种广泛应用于网络数据传输和文件存储的高效压缩算法。它结合了LZ77(一种基于滑动窗口的无损压缩算法)和霍夫曼编码(一种变字长编码方法),旨在提供高压缩比的同时,保持解压速度快且易于实现...
**zlib压缩函数库** zlib是一个开源的C语言库,专为数据压缩而设计,广泛应用于各种软件和操作系统中。它提供了高效且灵活的压缩和解压缩功能,支持多种数据格式,包括著名的gzip和deflate算法。zlib库不仅在互联网...
在IT行业中,压缩和解压缩数据是常见的任务,特别是在存储和传输大量数据时。...通过理解和使用ZLIB库,开发者可以创建自己的压缩和解压缩工具,满足特定需求,比如在游戏开发、文件传输或数据存储等领域。