利用 JZLib 对数据进行压缩以及解压缩

原创 2007年09月13日 19:08:00

利用开源的JZLib库进行简单的解压和压缩。适合于TCP/IP packet 包的传输。提供源代码

package test;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

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

/**
 * 压缩解压缩包类
 *
 * @author rockyzheng
 *
 */
public class ZipUtil {
 
 //输入数据的最大长度
 private static final int MAXLENGTH = 102400;
 private static final int BUFFERSIZE = 1024;

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

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

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

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

  byte[] data = new byte[MAXLENGTH];
  try {
   ByteArrayInputStream in = new ByteArrayInputStream(object);
   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;
  }
 }

 public static void main(String[] args) {

  try {
   String content = "发生的开发建设的房价证据法的思考积分十fjskfjsdkfjsdkfj阿飞就受到开发建设的开发建设的开发建设的疯狂解说的开发建设的开发进度上看风景的思考附件三大块非晶副教授的开发建设的开发建设的开发建设咖啡就是打开附件防辐射的看法就开始大幅降低快速反击得手辅导书开发建设的开发建设咖啡机上的非司法解释的开发建设的开发大富商的金发科技时代副教授的开发建设的福建省地方可发送到附近开始的发生大幅减少的开发建设的开发建设的";
   System.out.println(content);
   byte[] origin = content.getBytes();
   System.out.println("orign length is : " + origin.length);
   byte[] compressed = Compress(origin);
   System.out.println("compressed length is : " + compressed.length);

   byte[] unCompressed = UnCompress(compressed);
   System.out.println("unCompressed length is : "
     + unCompressed.length);

   String newContent = new String(unCompressed);
   System.out.println(newContent);
  } catch (Exception e) {
   e.printStackTrace();
  }

 }
}
 

huffman算法实现文件的压缩与解压

本文采用哈夫曼编码的方式进行文件的压缩和解压缩,主要原理是通过huffman编码来表示字符,出现次数多的编码短,出现次数少的编码长,这样整体而言,所需的总的bit位是减少的。但是当大部分字符出现的频率...
  • qq_29503203
  • qq_29503203
  • 2016年11月05日 11:04
  • 2401

Huffman编码实现压缩解压缩

Huffman编码实现压缩解压缩 什么是Huffman压缩 Huffman( 哈夫曼 ) 算法在上世纪五十年代初提出来了,它是一种无损压缩方法,在压缩过程中不会丢失信息熵,而且可以证明 Huffm...
  • u013290075
  • u013290075
  • 2016年04月04日 23:22
  • 1760

利用huffman编码实现压缩文件

哈夫曼是一种常用的压缩方法。是1952年为文本文件建立的,其基本原理是频繁使用的数据用较短的代码代替,很少使用的数据用较长的代码代替,每个数据的代码各不相同。这些代码都是二进制码,且码的长度是可变的。...
  • dl0914791011
  • dl0914791011
  • 2014年10月15日 16:03
  • 7103

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

import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataOutput...
  • majian_1987
  • majian_1987
  • 2013年08月23日 10:26
  • 8385

字符串解压缩类库(zip、GZIP、QuickLz、snappy、lzf、jzlib)介绍

1、ZIP、 GZIP  计算机文件压缩算法,JDK中java.util.zip.*中实现。主要包括ZipInputStream/ ZipOutputStream、GZipInputStream/...
  • MCpang
  • MCpang
  • 2014年11月15日 05:25
  • 8896

字符串解压缩类库(zip、GZIP、QuickLz、snappy、lzf、jzlib)性能对比

测试说明: 1、版本:       ZIP、GZIP :JDK1.6版;QuickLZ: 1.5.0 final;Snappy:1.1.1.6       LZF:1.0.3;JZLIB:1....
  • MCpang
  • MCpang
  • 2014年11月15日 05:36
  • 3709

利用apache ant 包进行压缩、解压缩zip,归档tar,解档tar,压缩tar.gz解压tar.gz

最近用到了利用java进行一序列压缩解压缩,jdk也自带了,这里我就不用它了。本例用到的开源包是apahce ant.jar。我上传了。希望对大家有帮组。 引用Java压缩zip,解压缩zipJava...
  • lr5200
  • lr5200
  • 2011年07月14日 17:11
  • 5718

Java利用Ant包进行解压缩文件

今天在项目中需要用到java进行文件解压缩,本来打算使用java.util下的API进行解压文件,可是遇到文件编码不能转换的问题(是因为java.util.zip下的格式转换有问题 ,jdk中的zip...
  • u012204058
  • u012204058
  • 2016年12月22日 17:44
  • 2231

利用Python对文件进行解压缩

对文件进行解压缩是我们日常工作中最平常不过的行为了,压缩过的文件不仅可以节省磁盘空间,而且在网络传输中也可以节省不少时间。Python为我们提供了zipfile模块,这使得我们可以十分方便地对文件进行...
  • sinat_36246371
  • sinat_36246371
  • 2017年03月16日 15:32
  • 701

用DSP进行mp3解压缩的算法源代码(36K)

  • 2008年03月15日 08:44
  • 36KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用 JZLib 对数据进行压缩以及解压缩
举报原因:
原因补充:

(最多只允许输入30个字)