`
thb143
  • 浏览: 8589 次
文章分类
社区版块
存档分类
最新评论

java对byte数组解压缩(zip,gzip,bzip2,jzlib)

 
阅读更多
//导入bzip2.jar和jzlib相关java文件

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
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 org.apache.tools.bzip2.CBZip2InputStream;
import org.apache.tools.bzip2.CBZip2OutputStream;

import com.jcraft.jzlib.JZlib;
import com.jcraft.jzlib.ZInputStream;
import com.jcraft.jzlib.ZOutputStream;

public class Test {

	/***
	 * 压缩GZip
	 * 
	 * @param data
	 * @return
	 */
	public static byte[] gZip(byte[] data) {
		byte[] b = null;
		try {
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			GZIPOutputStream gzip = new GZIPOutputStream(bos);
			gzip.write(data);
			gzip.finish();
			gzip.close();
			b = bos.toByteArray();
			bos.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return b;
	}

	/***
	 * 解压GZip
	 * 
	 * @param data
	 * @return
	 */
	public static byte[] unGZip(byte[] data) {
		byte[] b = null;
		try {
			ByteArrayInputStream bis = new ByteArrayInputStream(data);
			GZIPInputStream gzip = new GZIPInputStream(bis);
			byte[] buf = new byte[1024];
			int num = -1;
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			while ((num = gzip.read(buf, 0, buf.length)) != -1) {
				baos.write(buf, 0, num);
			}
			b = baos.toByteArray();
			baos.flush();
			baos.close();
			gzip.close();
			bis.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return b;
	}

	/***
	 * 压缩Zip
	 * 
	 * @param data
	 * @return
	 */
	public static byte[] zip(byte[] data) {
		byte[] b = null;
		try {
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			ZipOutputStream zip = new ZipOutputStream(bos);
			ZipEntry entry = new ZipEntry("zip");
			entry.setSize(data.length);
			zip.putNextEntry(entry);
			zip.write(data);
			zip.closeEntry();
			zip.close();
			b = bos.toByteArray();
			bos.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return b;
	}

	/***
	 * 解压Zip
	 * 
	 * @param data
	 * @return
	 */
	public static byte[] unZip(byte[] data) {
		byte[] b = null;
		try {
			ByteArrayInputStream bis = new ByteArrayInputStream(data);
			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;
	}

	/***
	 * 压缩BZip2
	 * 
	 * @param data
	 * @return
	 */
	public static byte[] bZip2(byte[] data) {
		byte[] b = null;
		try {
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			CBZip2OutputStream bzip2 = new CBZip2OutputStream(bos);
			bzip2.write(data);
			bzip2.flush();
			bzip2.close();
			b = bos.toByteArray();
			bos.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return b;
	}

	/***
	 * 解压BZip2
	 * 
	 * @param data
	 * @return
	 */
	public static byte[] unBZip2(byte[] data) {
		byte[] b = null;
		try {
			ByteArrayInputStream bis = new ByteArrayInputStream(data);
			CBZip2InputStream bzip2 = new CBZip2InputStream(bis);
			byte[] buf = new byte[1024];
			int num = -1;
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			while ((num = bzip2.read(buf, 0, buf.length)) != -1) {
				baos.write(buf, 0, num);
			}
			b = baos.toByteArray();
			baos.flush();
			baos.close();
			bzip2.close();
			bis.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return b;
	}

	/**
	 * 把字节数组转换成16进制字符串
	 * 
	 * @param bArray
	 * @return
	 */
	public static String bytesToHexString(byte[] bArray) {
		StringBuffer sb = new StringBuffer(bArray.length);
		String sTemp;
		for (int i = 0; i < bArray.length; i++) {
			sTemp = Integer.toHexString(0xFF & bArray[i]);
			if (sTemp.length() < 2)
				sb.append(0);
			sb.append(sTemp.toUpperCase());
		}
		return sb.toString();
	}

	/**
	 * 压缩数据
	 * 
	 * @param object
	 * @return
	 * @throws IOException
	 */
	public static byte[] jzlib(byte[] object) {

		byte[] data = null;
		try {
			ByteArrayOutputStream out = new ByteArrayOutputStream();
			ZOutputStream zOut = new ZOutputStream(out,
					JZlib.Z_DEFAULT_COMPRESSION);
			DataOutputStream objOut = new DataOutputStream(zOut);
			objOut.write(object);
			objOut.flush();
			zOut.close();
			data = out.toByteArray();
			out.close();

		} catch (IOException e) {
			e.printStackTrace();
		}
		return data;
	}

	/**
	 * 解压被压缩的数据
	 * 
	 * @param object
	 * @return
	 * @throws IOException
	 */
	public static byte[] unjzlib(byte[] object) {

		byte[] data = null;
		try {
			ByteArrayInputStream in = new ByteArrayInputStream(object);
			ZInputStream zIn = new ZInputStream(in);
			byte[] buf = new byte[1024];
			int num = -1;
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			while ((num = zIn.read(buf, 0, buf.length)) != -1) {
				baos.write(buf, 0, num);
			}
			data = baos.toByteArray();
			baos.flush();
			baos.close();
			zIn.close();
			in.close();

		} catch (IOException e) {
			e.printStackTrace();
		}
		return data;
	}

	public static void main(String[] args) {
		String s = "this is a test";

		byte[] b1 = zip(s.getBytes());
		System.out.println("zip:" + bytesToHexString(b1));
		byte[] b2 = unZip(b1);
		System.out.println("unZip:" + new String(b2));

		byte[] b3 = bZip2(s.getBytes());
		System.out.println("bZip2:" + bytesToHexString(b3));
		byte[] b4 = unBZip2(b3);
		System.out.println("unBZip2:" + new String(b4));

		byte[] b5 = gZip(s.getBytes());
		System.out.println("bZip2:" + bytesToHexString(b5));
		byte[] b6 = unGZip(b5);
		System.out.println("unBZip2:" + new String(b6));

		byte[] b7 = jzlib(s.getBytes());
		System.out.println("jzlib:" + bytesToHexString(b7));
		byte[] b8 = unjzlib(b7);
		System.out.println("unjzlib:" + new String(b8));
	}
}
分享到:
评论

相关推荐

    JAVA文件压缩与解压缩实践(源代码+论文)

    1. `java.util.zip` 包:Java标准库提供了对ZIP和GZIP压缩的支持。`ZipOutputStream` 和 `ZipInputStream` 用于创建和读取ZIP文件,而 `GZIPOutputStream` 和 `GZIPInputStream` 则用于处理GZIP压缩。 2. Apache ...

    C#实现压缩和解压缩的方法示例【Gzip和Zip方式】

    ZipUtil 类提供了压缩和解压缩的方法,使用 BZip2OutputStream 将字符串压缩成 byte 数组,解压缩时使用 BZip2InputStream 将 byte 数组解压缩成字符串。 四、压缩和解压缩的应用场景 压缩和解压缩有很多实际应用...

    毕业设计JAVA文件压缩与解压缩实践(源代码+论文).zip

    常见的压缩算法有LZ77(如gzip)、Huffman编码、DEFLATE(如ZIP、PNG)、Burrows-Wheeler Transform(BWT,如bzip2)等。在Java中,`java.util.zip`包提供了对GZIP和ZIP格式的支持。理解这些算法的工作原理对于实现...

    JAVA文件压缩与解压缩实践(源代码+论文).zip

    Java文件压缩与解压缩是Java开发中常见的操作,特别是在数据传输、...在实践中,还可以进一步研究其他压缩算法,如LZ4、BZip2等,以及第三方库如Apache Commons Compress,它们提供了更丰富的压缩选项和更好的性能。

    JAVA源码JAVA文件压缩与解压缩实践(源代码+论文)

    除了Java自带的标准库之外,还可以考虑使用如Apache Commons Compress这样的第三方库来实现更多的压缩格式(如Gzip、Bzip2等)以及更复杂的压缩需求。 #### 4. 压缩与解压缩实践 在实践中,通常会结合Java标准库和...

    基于Java的用GZIP压缩解压文件.zip

    在Java编程环境中,GZIP是一种常用的文件压缩格式,它基于DEFLATE算法,可以用于压缩和解压缩数据。...同时,了解其他压缩算法如DEFLATE、BZIP2或LZ4也是有益的,它们可能在特定场景下提供更好的性能或压缩效果。

    java解压缩代码资料

    Java解压缩技术是Java开发中常见的一种操作,主要用于处理ZIP、GZ、TAR等格式的压缩文件。在本文中,我们将深入探讨Java如何进行文件的解压缩,并提供相关的代码示例。 首先,Java标准库提供了`java.util.zip`包,...

    C#压缩解压缩类库项目SharpZip.zip

    其中,`SharpZipLib`是一个广泛使用的开源库,它提供了对ZIP、GZip、BZip2、Tar和7-Zip等格式的支持。在这个名为"C#压缩解压缩类库项目SharpZip.zip"的压缩包中,我们很可能会找到一个使用SharpZipLib库来实现C#压缩...

    C# zip压缩文件的打包与解压缩

    SharpZipLib是一个开源的压缩库,它提供了对多种压缩格式的支持,包括ZIP、GZip、BZip2等。要使用SharpZipLib,首先需要在项目中添加对它的引用。通常,我们可以从NuGet包管理器安装SharpZipLib,这样可以方便地引入...

    用java解压*.zip*.rar*.gz*.bz*.bz2等压缩文件含jar

    GZ、BZ和BZ2文件是gzip、bzip2和bzip2的压缩格式,主要用于压缩文本文件。Java内置的`java.util.zip.GZIPInputStream`和`java.util.zip.GZIPOutputStream`处理GZ文件,而Apache Commons Compress库可以处理BZ和BZ2...

    ICSharpCode.SharpZipLib.dll

    这时,一个常用的库就是ICSharpCode.SharpZipLib.dll,它是一个功能强大的开源库,提供了对多种压缩格式的支持,包括ZIP、GZip、BZip2、Tar和7-Zip等。本文将详细介绍这个库以及在Unity中的使用方法。 首先,让我们...

    调用ICSharpCode.SharpZipLib.dll压缩与解压缩

    这个库是一个轻量级且功能强大的库,用于处理ZIP、GZip、BZip2和Tar格式的压缩和解压缩。本文将详细介绍如何使用ICSharpCode.SharpZipLib.dll来实现这些功能。 首先,你需要在项目中引入ICSharpCode.SharpZipLib....

    基于Java的文件压缩解压缩包 Commons Compress.zip

    这个库涵盖了多种压缩算法和文件格式,包括但不限于7z、AR、ARJ、BZip2、CPIO、DEFLATE、GZip、ISO9660、LHA、LRZIP、Pack200、PEF、TAR、XZ、Z、Zip、Zstd等。在本文中,我们将深入探讨如何使用Apache Commons ...

    c#动态解压缩方法

    SharpZipLib是一个强大的C#库,它提供了对ZIP、GZip、BZip2、Tar和7-Zip等格式的全面支持。在这个案例中,我们将专注于使用SharpZipLib来处理ZIP文件的动态解压缩。首先,确保已经正确地将SharpZipLib库引入到项目中...

    .net解压缩文件,ICSharpCode.SharpZipLi

    这个库是一个开源的C#实现的压缩库,支持多种压缩格式,包括ZIP、GZip、BZip2等。在C#中使用这个库,可以方便地进行文件或文件夹的压缩与解压缩。 首先,我们来详细了解一下ICSharpCode.SharpZipLib。这是一个由IC#...

    使用ICSharpCode.SharpZipLib.dll实现在线解压缩.rar

    ICSharpCode.SharpZipLib,简称SharpZipLib,是由IC#Code项目开发的一个强大的压缩和解压缩库,支持ZIP、GZIP、BZip2、Tar等多种格式。对于RAR文件的解压缩,SharpZipLib虽然原生不支持,但可以通过一些变通方法处理...

    文件解压缩

    总的来说,Java中的BZIP2压缩可以通过Apache Commons Compress库方便地实现,无论是文件的压缩还是解压缩,都只需几行代码就能完成。这个库大大简化了开发者的工作,使得数据处理更加高效和便捷。在进行文件操作时,...

    C#利用SharpZipLib进行压缩和解压

    SharpZipLib是一个开源的压缩库,它提供了压缩和解压的功能,支持多种压缩格式,包括Zip、GZip、BZip2等。 SharpZipLib库是基于Java的Zip库的实现的,它提供了与Java中的Zip库相似的API,使得开发者可以轻松地在C#中...

    使用SharpZipLib压缩解压缩

    SharpZipLib是一款开源的.NET库,它为C#和.NET Framework提供了广泛的压缩和解压缩功能,包括对ZIP、GZip、Tar、BZip2和7-Zip格式的支持。这个库非常实用,尤其对于那些需要在.NET环境中处理压缩文件的开发者来说。...

    基于Java的从压缩包中提取文件.zip

    除了基础的解压缩功能,Java还允许我们处理更复杂的情况,如密码保护的ZIP文件、自解压的ZIP文件以及包含其他压缩格式(如GZIP或BZIP2)的ZIP条目。此外,还可以使用第三方库,如Apache Commons Compress或Google's ...

Global site tag (gtag.js) - Google Analytics