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
修复当使用 Z_FIXED 参数时块类型选择的错误,现在将选择最小的块类型,以实现更好的压缩效果。 修复了参数 CC 配置不生效的问题。 对 CRC 函数提供了正确的输入参数,以缓解 Java 中的一个漏洞。 修复了新的 CRC ...
DEFLATE算法在zlib中的实现既考虑了压缩速度,也兼顾了解压缩的效率。 在源代码包`src`中,你会找到所有必要的C语言源文件和头文件,包括核心压缩和解压缩函数,以及与不同平台兼容性的适配代码。开发者可以将这些...
总的来说,zlib是一个强大且不可或缺的工具,它为各种应用程序提供了数据压缩能力,从而提高了效率、节省了存储空间,并在一定程度上改善了网络传输性能。在开发过程中,了解并熟练使用zlib,对于优化软件性能和用户...
`zlib`是Python、C++、Java等多语言中的一个通用数据压缩库,它实现了多种压缩算法,如Deflate、Gzip和Zlib等。在Node.js中,`zlib`模块提供了强大的数据压缩和解压缩功能,然而,由于Node.js的异步特性,其大部分...
对于zlib-1.2.8-win32-x86,此文件夹可能包含已编译的zlib压缩和解压缩工具,如`zlib1.dll`,开发者和用户可以直接使用它们进行数据压缩和解压缩操作。 2. **include** 文件夹:这是开发者的重要资源,包含了zlib库...
zlib库不仅支持数据压缩,还提供了数据解压缩的功能,适用于多种编程语言,如C、C++、Java等。 **二、zlib的核心功能** 1. **数据压缩算法**:zlib采用了DEFLATE压缩算法,这是一种结合了LZ77滑动窗口压缩和霍夫曼...
Java中的Zlib、Zip和Gzip是三种广泛使用的数据压缩库和格式,它们在软件开发,尤其是处理数据传输和存储时扮演着重要角色。这里我们将深入探讨这些技术及其在Java环境中的应用。 **Zlib**: Zlib是一个开源的库,...
java压缩字符串
在IT行业中,压缩和解压缩数据是常见的任务,特别是在存储和传输大量数据时。...通过理解和使用ZLIB库,开发者可以创建自己的压缩和解压缩工具,满足特定需求,比如在游戏开发、文件传输或数据存储等领域。
在Delphi中,你可以使用TZStream或TZOutputStream等类来实现ZLib压缩。例如,你可以创建一个TMemoryStream对象来装载原始数据,然后通过TZOutputStream将这个内存流压缩到另一个TMemoryStream中。 解压过程与压缩...
由于项目需求,需要在C#中压缩,然后在java里解压缩,或者倒过来,在Java里压缩,C#里解压缩,以下代码经测试验证通过。 关键技术点和体会: 压缩的结果采用Base64编码,方便在Java端或者C#端打印出来调试,也方便...
3. **软件开发**:许多编程语言和框架(如Python、Java、.NET)内建了对zlib的支持,用于数据压缩和解压缩。 4. **图像和文档格式**:PNG图像格式和PDF文档格式都使用了zlib进行数据压缩。 总结,zlib是一个强大的...
【zlib-1.2.11-x86-x64-debug-release-vc14.zip】这个压缩包文件包含了Zlib库的多个版本和配置,适用于x86和x64...Zlib的高效和跨平台特性使其成为开发者的首选工具之一,尤其在需要处理大量数据流或文件压缩的场景下。
总的来说,zlib压缩库以其高效、稳定和灵活的特性,成为数据压缩领域的首选工具。通过JNI,开发者可以充分利用其优势,实现在Android平台上的原生代码优化。理解和掌握zlib的使用方法,对于提升应用程序的性能和功能...
本文深入探讨了J2ME环境下基于ZLIB的数据压缩与解压缩技术,分析了ZLIB算法原理及其在J2ME平台的适配方案,详细阐述了数据压缩的实现流程。通过JZlib包的引入和修改,克服了J2ME在数据压缩功能上的不足,为移动设备...
以下将详细讲解如何利用ajax和pako.js实现gzip数据压缩上传。 首先,理解gzip压缩原理。gzip是一种广泛使用的数据压缩算法,它基于DEFLATE算法,能有效减少文件大小,提高网络传输效率。在Web应用中,服务器通常...
java zlib压缩算法资源,懒的写了,看看多少字了
总之,通过引入Zlib库,VC开发者可以方便地在C++环境中处理Java中gzip压缩的数据,实现跨语言的数据交换和处理。这个库的强大功能不仅限于gzip,还包括其他多种压缩和解压缩格式,是C++开发中处理压缩数据的重要工具...
在Java编程语言中,Deflater和Inflater是两个重要的类,它们分别用于数据的压缩和解压缩,基于Zlib库实现。这两个类广泛应用于处理字节流,比如在网络传输或者存储大量数据时,压缩数据可以有效地节省空间。接下来,...