/*
* 文件名: ZipUtil.java
* 版权: xxxxxxxx.com. Copyright 1999-2010, All rights reserved
* 描述: 是压缩工具类,此类根据com.jcraft.jzlib地三方提供的核心类进行.压缩和解压缩。
* 修改人:
* 修改时间: 2010-09-13
* 跟踪单号:
* 修改单号:
* 修改内容: 新增
可以到google是去下载jzlib4me20100516.rar 也就是jzlib4me的google项目为第三方支持包.
这个ZipUtil.java的zlib支持J2ME.也就是将zlib的压缩和解压缩的两个方法可以放到J2ME项目中.但也需要jzlib4me20100516.rar包.
*/
package com.temobi.ms.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import com.jcraft.jzlib.JZlib;
import com.jcraft.jzlib.ZInputStream;
import com.jcraft.jzlib.ZOutputStream;
import com.temobi.ms.resource.ConfigRes;
import com.temobi.ms.resource.Const;
/**
* 压缩工具包
*/
public class ZipUtil
{
public static byte[] deflate(byte[] bContent)
{
MapServerLog.beforeMethod();
try
{
String sys_compress = ConfigRes.getInstance().get(Const.SYS_COMPRESS);
byte[] temp = null;
if("LZIP".equals(sys_compress))
{
temp = ZipUtil.zLib(bContent);
}
else
if("GZIP".equals(sys_compress))
{
temp = ZipUtil.gZip(bContent);
}
else
if("ZIP".equals(sys_compress))
{
temp = ZipUtil.zip(bContent);
}
MapServerLog.afterMethod();
return temp;
}
catch (IOException e)
{
MapServerLog.exceptionMethod(e);
e.printStackTrace();
}
MapServerLog.afterMethod();
return null;
}
public static byte[] inflate(byte[] bContent)
{
MapServerLog.beforeMethod();
try
{
String sys_compress = ConfigRes.getInstance().get(Const.SYS_COMPRESS);
byte[] temp = null;
if("LZIP".equals(sys_compress))
{
temp = ZipUtil.unZLib(bContent);
}
else
if("GZIP".equals(sys_compress))
{
temp = ZipUtil.unGZip(bContent);
}
else
if("ZIP".equals(sys_compress))
{
temp = ZipUtil.unZip(bContent);
}
MapServerLog.afterMethod();
return temp;
}
catch (IOException e)
{
MapServerLog.exceptionMethod(e);
e.printStackTrace();
}
MapServerLog.afterMethod();
return null;
}
// 输入数据的最大长度
private static final int MAXLENGTH = 102400;
// 设置缓存大小
private static final int BUFFERSIZE = 1024;
// 压缩选择方式:
//
// /** Try o get the best possible compression */
// public static final int COMPRESSION_MAX = JZlib.Z_BEST_COMPRESSION;
//
// /** Favor speed over compression ratio */
// public static final int COMPRESSION_MIN = JZlib.Z_BEST_SPEED;
//
// /** No compression */
// public static final int COMPRESSION_NONE = JZlib.Z_NO_COMPRESSION;
//
// /** Default compression */
// public static final int COMPRESSION_DEFAULT =
// JZlib.Z_DEFAULT_COMPRESSION;
/**
* ZLib压缩数据
*
* @param object
* @return
* @throws IOException
*/
public static byte[] zLib(byte[] bContent) throws IOException
{
byte[] data = null;
try
{
ByteArrayOutputStream out = new ByteArrayOutputStream();
ZOutputStream zOut = new ZOutputStream(out,
JZlib.Z_BEST_COMPRESSION); // 压缩级别,缺省为1级
DataOutputStream objOut = new DataOutputStream(zOut);
objOut.write(bContent);
objOut.flush();
zOut.close();
data = out.toByteArray();
out.close();
}
catch (IOException e)
{
e.printStackTrace();
throw e;
}
return data;
}
/**
* ZLib解压数据
*
* @param object
* @return
* @throws IOException
*/
public static byte[] unZLib(byte[] bContent) throws IOException
{
byte[] data = new byte[MAXLENGTH];
try
{
ByteArrayInputStream in = new ByteArrayInputStream(bContent);
ZInputStream zIn = new ZInputStream(in);
DataInputStream objIn = new DataInputStream(zIn);
int len = 0;
int count = 0;
while ((count = objIn.read(data, len, len + BUFFERSIZE)) != -1)
{
len = len + count;
}
byte[] trueData = new byte[len];
System.arraycopy(data, 0, trueData, 0, len);
objIn.close();
zIn.close();
in.close();
return trueData;
}
catch (IOException e)
{
e.printStackTrace();
throw e;
}
}
/**
* GZip压缩数据
*
* @param object
* @return
* @throws IOException
*/
public static byte[] gZip(byte[] bContent) throws IOException
{
byte[] data = null;
try
{
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gOut = new GZIPOutputStream(out, bContent.length); // 压缩级别,缺省为1级
DataOutputStream objOut = new DataOutputStream(gOut);
objOut.write(bContent);
objOut.flush();
gOut.close();
data = out.toByteArray();
out.close();
}
catch (IOException e)
{
e.printStackTrace();
throw e;
}
return data;
}
/**
* GZip解压数据
*
* @param object
* @return
* @throws IOException
*/
public static byte[] unGZip(byte[] bContent) throws IOException
{
byte[] data = new byte[MAXLENGTH];
try
{
ByteArrayInputStream in = new ByteArrayInputStream(bContent);
GZIPInputStream pIn = new GZIPInputStream(in);
DataInputStream objIn = new DataInputStream(pIn);
int len = 0;
int count = 0;
while ((count = objIn.read(data, len, len + BUFFERSIZE)) != -1)
{
len = len + count;
}
byte[] trueData = new byte[len];
System.arraycopy(data, 0, trueData, 0, len);
objIn.close();
pIn.close();
in.close();
return trueData;
}
catch (IOException e)
{
e.printStackTrace();
throw e;
}
}
/***
* 压缩Zip
*
* @param data
* @return
* @throws IOException
*/
public static byte[] zip(byte[] bContent) throws IOException
{
byte[] b = null;
try
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(bos);
ZipEntry entry = new ZipEntry("zip");
entry.setSize(bContent.length);
zip.putNextEntry(entry);
zip.write(bContent);
zip.closeEntry();
zip.close();
b = bos.toByteArray();
bos.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
return b;
}
/***
* 解压Zip
*
* @param data
* @return
* @throws IOException
*/
public static byte[] unZip(byte[] bContent) throws IOException
{
byte[] b = null;
try
{
ByteArrayInputStream bis = new ByteArrayInputStream(bContent);
ZipInputStream zip = new ZipInputStream(bis);
while (zip.getNextEntry() != null)
{
byte[] buf = new byte[1024];
int num = -1;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while ((num = zip.read(buf, 0, buf.length)) != -1)
{
baos.write(buf, 0, num);
}
b = baos.toByteArray();
baos.flush();
baos.close();
}
zip.close();
bis.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
return b;
}
public static void main(String[] args)
{
String newContent = "";
try
{
String content = "水电费his大家fks打飞机速度快放假了速度快放假速度发生的飞机上的考虑防静电速度开飞机上打开了房间速度快让他文件";
System.out.println(content);
byte[] origin = content.getBytes();
System.out.println("原始长度 length is : " + origin.length);
// ZLib 压缩
byte[] zLibCnt = zLib(origin);
System.out.println("zLib压缩后长度 : " + zLibCnt.length);
byte[] unzLibCnt = unZLib(zLibCnt);
System.out.println("zLib解压后长度 : " + unzLibCnt.length);
newContent = new String(unzLibCnt);
System.out.println(newContent);
// GZip 压缩
byte[] gZipCnt = gZip(origin);
System.out.println("GZip压缩后长度 : " + gZipCnt.length);
byte[] ungZipCnt = unGZip(gZipCnt);
System.out.println("GZip解压后长度 : " + ungZipCnt.length);
newContent = new String(ungZipCnt);
System.out.println(newContent);
// Zip 压缩
byte[] zipCnt = zip(origin);
System.out.println("Zip压缩后长度 : " + zipCnt.length);
byte[] unZipCnt = unZip(zipCnt);
System.out.println("Zip解压后长度 : " + unZipCnt.length);
newContent = new String(unZipCnt);
System.out.println(newContent);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
分享到:
相关推荐
Java中的Zlib、Zip和Gzip是三种广泛使用的数据压缩库和格式,它们在软件开发,尤其是处理数据传输和存储时扮演着重要角色。这里我们将深入探讨这些技术及其在Java环境中的应用。 **Zlib**: Zlib是一个开源的库,...
java解压zlib和压缩zlib的jar
本篇文章将详细介绍如何在`C++`中利用`Zlib`库实现对`zip`文件的压缩和解压,并特别关注其支持的递归压缩特性,以及如何将其与自动更新功能结合使用。 首先,我们需要理解`Zlib`库的基本原理。`Zlib`库基于`DEFLATE...
本篇文章将详细介绍如何在UCOS系统中移植ZLIB库以及实现ZIP文件的解压缩。 首先,ZLIB是一个开源的压缩库,它提供了数据的无损压缩和解压缩功能,常用于GIF、PNG等文件格式。移植ZLIB到UCOS涉及到以下几个关键步骤...
为了解决这个问题,我们可以利用Zlib库,它是一个开源的、跨平台的压缩库,支持多种压缩算法,包括ZIP。在VB中集成Zlib,可以实现直接在代码中对ZIP文件进行解压缩,提高了程序的稳定性和自给自足性。 Zlib库主要...
而`zlib`是一个更底层的库,它包含了`deflate`算法的实现,不仅支持gzip格式,还能生成和读取其他压缩格式,如`zlib`自身的压缩格式。 在Delphi中,我们可以直接利用`zlib`库来处理gzip压缩,因为它支持多种压缩...
同时,zlib还支持流式压缩和解压缩,适合处理大文件或持续的数据流。 GZipWrapper.dsw文件可能是一个开发工作区,通常包含Visual Studio项目文件,用于构建一个使用zlib库实现GZIP格式压缩的示例程序。GZIP是基于...
不过,你的程序可能还需要处理其他格式,如ZIP,它内部也可以使用ZLIB压缩。 总的来说,这个C++小程序的实现涉及到文件I/O操作、内存管理、ZLIB库的使用以及可能的用户交互。通过这样的项目,开发者不仅可以深入...
Zlib库不仅提供了压缩和解压缩的功能,还支持流式处理,适合于大文件或在线数据处理。 在描述中提到的"基于zlib实现,使用zlib/contrib/minizip下的例子修改而来",指的是使用了minizip这个项目。Minizip是Zlib的一...
首先,zlib库是一个开源的、跨平台的库,它提供了数据压缩和解压缩的功能,支持多种格式,包括gzip和deflate。在C++中使用zlib库,可以方便地集成到项目中进行文件的压缩与解压操作。 要使用zlib库解压zip文件,...
zlib一直是C/C++开发者的首选zip,gz库压缩方案, 但是官方的例子并不支持压缩目录, 说的也不清楚, 我感觉官方貌似是想考验下库的使用者? http://blog.csdn.net/infoworld/article/details/60480313
2. **压缩函数**:`CZip`类中通常会有一个`CompressFile`函数,接受文件路径和目标压缩文件路径作为参数,使用Zlib库的`deflateInit2`、`deflate`和`deflateEnd`等函数来完成文件的压缩。 3. **多文件压缩**:如果...
该案例通过zlib实现gzip的压缩解压功能,包括解压gzip字符串、图片两个案例;提供了zlib1211的源码包和对应编译后生成的文件; 相应说明参考笔者博客:Qt笔记8--zlib实现gzip解压,链接...
《深入解析zlib123:C语言实现的zip压缩源码分析》 在IT行业中,数据压缩技术是一项至关重要的技能,特别是在存储和传输大量数据时。本文将深入探讨一个名为"zlib123"的开源项目,该项目包含了C语言实现的zip压缩...
ZLIB是一种高效无损压缩算法,源自于GZIP,但通过剔除压缩过程中的冗余信息,进一步提高了缓冲区数据的压缩速度。ZLIB的核心压缩机制基于LZ77算法,采用滑动窗口技术进行数据匹配,旨在通过查找已编码信息中的重复...
标题中的"zlib_zip_"可能是指ZLib库与ZIP压缩格式相关的实现或扩展。ZLib是一个广泛使用的开源压缩库,而ZIP是一种常见的文件压缩格式。接下来我们将深入探讨这两个主题。 ZLib是由Jean-loup Gailly和Mark Adler...
本篇将详细阐述`zlib`及其与ZIP压缩格式的关系,以及`zlib`提供的相关文件的功能。 `zlib`是由Jean-loup Gailly和Mark Adler开发的,它是一个免费且跨平台的库,主要用于实现通用的无损数据压缩算法。`zlib`库的...