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

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

时间: 2024-10-10 23:08:07

Java对byte数组压缩 解压缩 (zip,gzip,bzip2,jzlib)的相关文章

JAVA压缩 解压缩zip 并解决linux下中文乱码

1. [代码][Java]代码   1:再压缩前,要设置linux模式, 需要使用第三方ant-1.6.5.jar  如果是文件目录,则ZipEntry zipEntry=new ZipEntry(basePath + System.getProperties().getProperty("file.separator"));zipEntry.setUnixMode(755);//解决linux乱码 如果是文件,则 ZipEntry zipEntry=new ZipEntry(base

【转】java中byte数组与int类型的转换(两种方式)----不错

原文网址:http://blog.csdn.net/piaojun_pj/article/details/5903009 java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型.下面有两种方式. 第一种方法: public static byte[] int2byte(int

java的byte数组转换成在[0,255]范围内

C#的byte    是 0-255java的byte  是 -128-127  java的byte数组转换成在[0,255]范围内int data[]= new int[bytes.length];for(int i=0;i<bytes.length;i++) { data[i] = bytes[i] & 0xff;}

JAVA关于byte数组与String转换的问题

1 public class ToString{ 2 public static void main(String[] args){ 3 String aa = "hellow"; 4 byte[] bb = aa.getBytes(); 5 byte[] cc = aa.getBytes(); 6 7 System.out.println(aa); 8 System.out.println(bb.toString()); 9 System.out.println(cc.toStrin

java中byte数组与int类型的转换(两种方式)

java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型.下面有两种方式. 方法一 /** * int到byte[] * @param i * @return */ public static byte[] intToByteArray(int i) { byte[] resu

Shell命令-文件压缩解压缩之gzip、zip

文件及内容处理 - gzip.zip 1.gzip:gzip压缩工具 gzip命令的功能说明 gzip 命令用于压缩文件.gzip 是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出 .gz 的扩展名. gzip命令的语法格式 gzip [ -acdfhlLnNrtvV19 ] [-S suffix] [ name ... ]gzip [-acdfhlLnNqrtvV][-S <压缩字尾字符串>][-<压缩效率>][--best/fast][文件...] 或 gzip [-

Android解压缩ZIP / GZIP数据(基于InflaterInputStream实现)

在实际的项目代码使用过程中,发现如果用Java类库标准指定的GZIPInputStream读取压缩数据解压不能稳定工作,原因不明.反而使用InflaterInputStream可以替代GZIPInputStream稳定.正常工作,现在把基于InflaterInputStream的zip\gzip解压代码工具方法给出: public static byte[] decompress(byte[] compress) throws Exception { ByteArrayInputStream b

压缩 和归档 gzip bzip2 xz zip tar

linux流行的压缩格式 *.gz *.bz2 *.xz *.zip compress 压缩 uncompress 解压 流行的压缩工具 gzip *.gz bzip2 *.bz2 xz *.xz zip *.xip gzip 压缩工具用法 gzip /path/file  注意:压缩后会删除原文件,并且不可压缩目录 -d 解压缩 -# 1-9 (#为数字)表示指定压缩比 数字越大,压缩比越大,压缩后文件越小,压缩时间越长 gunzip /path/filename 解压缩 注:解压缩后会删除,

java 中byte[] 数组的合并

因工作的需要,在从事 .Net 的开发中接触到了 Java, 虽然在大学的时候学过一段Java 编程,但并没有在实际的工作中使用过, Java 和 .Net的C#语法很相似,都是面向对象的,感觉在语法上只有些细微的差异,这里主要介绍以下,将两个数组合并成的操作,废话不多说,直接上代码: //System.arraycopy()方法 public static byte[] byteMerger(byte[] bt1, byte[] bt2){ byte[] bt3 = new byte[bt1.