博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java对byte数组压缩 解压缩 (zip,gzip,bzip2,jzlib)
阅读量:4686 次
发布时间:2019-06-09

本文共 5872 字,大约阅读时间需要 19 分钟。

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();
 }

###################################################################################

 /**

  *jzlib 压缩数据
  * 
  * @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;
 }

 /**

  *jzLib压缩的数据
  * 
  * @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));
 }
}

转载于:https://www.cnblogs.com/zhangyukun/p/3748120.html

你可能感兴趣的文章
python学习——通过while循环语句实现九九乘法表的四种表达方式
查看>>
[解题报告] 100 - The 3n + 1 problem
查看>>
MvvmCross[翻译] 使用Xamarin与MvvmCross完成一个跨平台App
查看>>
Entity Framework 学习高级篇1—改善EF代码的方法(上)
查看>>
027-chown命令
查看>>
Python 线程、进程和协程
查看>>
赛普系统自动拨号
查看>>
platform_device与platform_driver
查看>>
[iOS] iPad与iPhone上各种标准控件的大小
查看>>
动态规划(游船费用问题)
查看>>
[原创]Windows利用BitNami搭建Redmine
查看>>
Mybatis逆向工程配置文件详细介绍(转)
查看>>
Linux命令学习一日一命令(RM)
查看>>
5-1
查看>>
一名3年工作经验的程序员应该具备的技能 -- 转载
查看>>
重回博客园有感
查看>>
【转】java事件监听机制
查看>>
Leetcode 423.从英文中重建数字
查看>>
数组 Arrays类
查看>>
String类的深入学习与理解
查看>>