压缩技术 zlib
为了缓解网络传输的压力及对内容的安全性的考虑,使用了zlib 对包体进行了压缩、解压缩特地记录代码
ZLibUtils 写道
public class ZLibUtils {
private static Logger log = Logger.getLogger("ZLibUtils.class");
/**
* 压缩字节数组
* @param data
* @return
*/
public static byte[] compress(byte[] data){
byte[] compressByteData = new byte[0];
Deflater compress = new Deflater(Deflater.DEFAULT_COMPRESSION);
compress.reset();
compress.setInput(data);
compress.finish();
ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length);
try {
byte[] buf = new byte[1024];
while(!compress.finished()){
int i = compress.deflate(buf);
bos.write(buf,0,i);
}
} catch (Exception e) {
// TODO Auto-generated catch block
compressByteData = data;
log.error("压缩数据异常:"+e.getMessage());
e.printStackTrace();
}finally{
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("压缩数据,关闭流异常:"+e.getMessage());
}
}
compressByteData = bos.toByteArray();
compress.end();
return compressByteData;
}
public static void compress(byte[] data, OutputStream os){
DeflaterOutputStream dos = new DeflaterOutputStream(os);
try {
dos.write(data,0, data.length);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("压缩数据异常:"+e.getMessage());
}finally{
try {
dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("压缩数据,关闭流异常:"+e.getMessage());
}
}
}
public static byte[] decompress(byte[] data){
byte[] decompressByteData = new byte[0];
Inflater decompress = new Inflater();
decompress.reset();
decompress.setInput(data);
ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length);
byte[] buf = new byte[1024];
try {
while (!decompress.finished()) {
int i = decompress.inflate(buf);
bos.write(buf,0,i);
}
decompressByteData = bos.toByteArray();
} catch (DataFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
decompressByteData = data;
log.error("解压缩数据异常:"+e.getMessage());
}finally{
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("解压缩数据,关闭流异常:"+e.getMessage());
}
}
decompress.end();
return decompressByteData;
}
public static byte[] decompress(InputStream is){
byte[] decompressByteData = new byte[0];
InflaterInputStream iis = new InflaterInputStream(is);
ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
try {
int i = 1024;
byte[] buf = new byte[i];
while ((i = iis.read(buf, 0, i)) > 0) {
bos.write(buf, 0, i);
}
decompressByteData = bos.toByteArray();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("解压缩数据异常:"+e.getMessage());
}finally{
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("解压缩数据,关闭流异常:"+e.getMessage());
}
}
return decompressByteData;
}
}
private static Logger log = Logger.getLogger("ZLibUtils.class");
/**
* 压缩字节数组
* @param data
* @return
*/
public static byte[] compress(byte[] data){
byte[] compressByteData = new byte[0];
Deflater compress = new Deflater(Deflater.DEFAULT_COMPRESSION);
compress.reset();
compress.setInput(data);
compress.finish();
ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length);
try {
byte[] buf = new byte[1024];
while(!compress.finished()){
int i = compress.deflate(buf);
bos.write(buf,0,i);
}
} catch (Exception e) {
// TODO Auto-generated catch block
compressByteData = data;
log.error("压缩数据异常:"+e.getMessage());
e.printStackTrace();
}finally{
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("压缩数据,关闭流异常:"+e.getMessage());
}
}
compressByteData = bos.toByteArray();
compress.end();
return compressByteData;
}
public static void compress(byte[] data, OutputStream os){
DeflaterOutputStream dos = new DeflaterOutputStream(os);
try {
dos.write(data,0, data.length);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("压缩数据异常:"+e.getMessage());
}finally{
try {
dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("压缩数据,关闭流异常:"+e.getMessage());
}
}
}
public static byte[] decompress(byte[] data){
byte[] decompressByteData = new byte[0];
Inflater decompress = new Inflater();
decompress.reset();
decompress.setInput(data);
ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length);
byte[] buf = new byte[1024];
try {
while (!decompress.finished()) {
int i = decompress.inflate(buf);
bos.write(buf,0,i);
}
decompressByteData = bos.toByteArray();
} catch (DataFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
decompressByteData = data;
log.error("解压缩数据异常:"+e.getMessage());
}finally{
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("解压缩数据,关闭流异常:"+e.getMessage());
}
}
decompress.end();
return decompressByteData;
}
public static byte[] decompress(InputStream is){
byte[] decompressByteData = new byte[0];
InflaterInputStream iis = new InflaterInputStream(is);
ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
try {
int i = 1024;
byte[] buf = new byte[i];
while ((i = iis.read(buf, 0, i)) > 0) {
bos.write(buf, 0, i);
}
decompressByteData = bos.toByteArray();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("解压缩数据异常:"+e.getMessage());
}finally{
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error("解压缩数据,关闭流异常:"+e.getMessage());
}
}
return decompressByteData;
}
}
相关推荐
在IT领域,数据压缩是一种常见的技术,用于减小文件的存储空间,提高传输效率。zlib库就是一种广泛使用的开源压缩库,它包含了多种压缩算法,如DEFLATE,适用于各种操作系统和编程语言。本篇文章将深入探讨zlib算法...
总结,将ZLIB解压缩库移植到STM32工程是一项技术性的工作,涉及到软件开发环境的配置、源码的适配、库的编译和测试等多个环节。通过这一过程,开发者不仅可以学习到ZLIB的压缩原理,还能深入理解STM32微控制器的开发...
在IT行业中,压缩和解压技术是数据存储和传输中不可或缺的一部分。Zlib是一个流行的开源库,被广泛用于实现数据压缩和解压缩功能。本文将详细介绍Zlib库以及如何使用易语言结合Zlib模块来实现文件和数据的压缩与解...
在IT行业中,压缩和解压缩技术是数据存储和传输中不可或缺的部分。`gzip`和`zlib`都是广泛使用的压缩库,尤其在编程语言如Delphi中,它们提供了高效的压缩和解压缩功能。本篇文章将深入探讨Delphi环境下,如何使用...
在IT领域,压缩技术是数据存储和传输中的关键部分,其中`zlib`是一个广泛使用的开源库,专门用于数据压缩和解压缩。本篇将详细探讨`zip`压缩代码和`zlib`库的使用,以及如何进行简单的封装。 首先,`zip`是一种流行...
在IT行业中,压缩技术是数据存储和传输领域的重要部分,其中`zlib`是一个广泛使用的开源压缩库。本文将深入探讨`zlib`压缩文件小工具及其相关知识点,旨在帮助用户理解和利用Python进行数据压缩。 首先,我们来理解...
为了解决这个问题,多线程压缩技术应运而生。 多线程压缩的核心思想是将大任务分解成多个小任务,每个小任务由一个单独的线程来执行。这样,多核处理器的各个核心可以并行处理这些任务,从而显著加快整个过程。在本...
在IT行业中,压缩和解压缩技术是至关重要的,特别是在处理大量数据传输时。`zlib1.dll`是一个关键的库文件,它提供了高效的数据压缩和解压缩功能,广泛应用于各种软件开发中。本文将深入探讨`zlib1.dll`的工作原理、...
zlib库采用的是DEFLATE压缩算法,该算法结合了LZ77(Lempel-Ziv)预测和霍夫曼编码(Huffman Coding)两种技术。LZ77用于查找文本中的重复模式并创建长度和距离的编码,而霍夫曼编码则是一种可变长度的前缀编码,...
ZLIB库是一个流行的开源压缩库,它提供了数据压缩和解压缩的功能,被许多编程语言,包括C++,用于实现文件和数据的压缩。本项目“C++ 基于ZLIB压缩库的数据或文件的压缩与解压缩小程序”正是利用了ZLIB库来实现这个...
在Linux环境下,使用C++编写一个能够利用zlib库压缩目录至.zip文件的程序是一项实用技能。zlib库是广泛使用的开源压缩库,它提供了多种...通过学习和实践,不仅可以掌握C++编程技巧,还能深入理解文件压缩和打包技术。
在IT行业中,数据压缩技术是一项至关重要的技能,特别是在存储和传输大量数据时。本文将深入探讨一个名为"zlib123"的开源项目,该项目包含了C语言实现的zip压缩算法源码以及静态链接库。我们将从基本概念、工作原理...
Gzip Zlib PNG 压缩算法是基于 deflate 算法的压缩技术,广泛应用于各种领域,如图形压缩(PNG)、文本压缩(Gzip)和数据压缩(Zlib)。本文将详细介绍 Gzip Zlib PNG 压缩算法的原理和实现方法。 压缩算法原理 ...
ZLIB数据压缩算法是一种广泛应用的无损数据压缩库,由Jean-Loup Gailly和Mark ...通过阅读和理解ZLIB源码,开发者能更好地掌握数据压缩技术,并可能应用到自己的项目中,比如在网络传输、文件存储和数据交换等方面。
在IT领域,数据压缩是一种常见的技术,用于减小文件或数据流的大小,以便更有效地存储或传输。zlib库是一个广泛使用的开源压缩库,由Jean-loup Gailly和Mark Adler开发,它提供了对DEFLATE压缩算法的实现。DEFLATE是...
**zlib库详解** **一、zlib简介** zlib是一个开源的库,它提供了数据压缩和解压缩功能,广泛应用于各种软件开发中,尤其在互联网传输和文件存储...通过学习和掌握zlib,开发者可以更好地利用压缩技术优化自己的应用。
- **虚拟化技术**: 在虚拟机镜像或容器中使用zlib压缩数据,减少资源占用。 zlib的灵活性和高效性使其成为许多开发者的首选压缩库。通过创建DLL,我们可以将这些强大的功能无缝地集成到各种Windows应用程序中。...
"PB使用Zlib压缩BLOB"这个主题就是关于如何在PowerBuilder应用中利用Zlib库来压缩和解压缩BLOB数据的方法。 Zlib是一个开源的、跨平台的数据压缩库,广泛应用于多种编程语言和系统中。它提供了一套高效且灵活的API...
`zlib`压缩库以其高效、可靠和广泛兼容性著称,其背后的关键技术是LZ77和霍夫曼编码的结合。通过分析`zlib`的源代码,我们可以学习到数据压缩的基本策略和实现技巧,这对于理解网络传输、文件存储以及数据处理等领域...