【转载】java对byte数组解压缩(zip,gzip,bzip2,jzlib)
1.首先在项目中导入bzip2.jar;(下载地址:http://download.csdn.net/detail/majian_1987/5997697)
2.下载jzlib的源代码zip包,解压,然后把com.jcraft.jzlib.*的所有java文件都拷贝到项目中(连包带java文件一起拷贝),下载地址:http://download.csdn.net/detail/majian_1987/5997737
3.然后编写如下代码:
- 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));
- }
- }
//输出结果
zip:504B03041400080008008B82CC3A000000000000000000000000030000007A69702BC9C82C5600A2448592D4E21200504B0708EAE71E0D0E0000000E000000504B010214001400080008008B82CC3AEAE71E0D0E0000000E0000000300000000000000000000000000000000007A6970504B05060000000001000100310000003F0000000000
unZip:this is a test
bZip2:6839314159265359F81D428D0000061180400022600C00200021A34CD42180A9B16D11D0F177245385090F81D428D0
unBZip2:this is a test
bZip2:1F8B08000000000000002BC9C82C5600A2448592D4E21200EAE71E0D0E000000
unBZip2:this is a test
jzlib:789C2BC9C82C5600A2448592D4E2120026330516
unjzlib:this is a test