Java压缩类库的使用-1.总述

  inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish)。

  压缩是编程中常见的技巧,多用于大文件压缩,数据流压缩等。在Java类库中,内置了jar、ZIP、GZIP、ZLIB等的支持(见java.util.zip、java.util.jar包)。另外在Apache项目下Ant中ant.jar的org.apache.tools.tar、org.apache.tools.zip、org.apache.tools.bzip2分别提供了tar、zip、bzip2的支持;Apache commons compress项目里提供了对AR、BZIP、CPIO、GZP、TAR、ZIP的支持。7-zip

提供了LZMA格式的压缩(public domain),QuickLZ

提供了quicklz格式的压缩(GPL),oberhumer.com

提供LZO格式的压缩(GPL),hadoop-gpl-compression

则对LZO的c实现用JNI进行包装,提供更快捷的LZO压缩。(来源:http://blog.csdn.net/inkfish)

  严格来说,TAR、AR、CPIO并不属于压缩软件,而是一种打包软件,它能把很多文件、文件夹打包成一个文件,供压缩程序压缩。而咱们在windows中熟悉的zip、rar,严格的说是具备打包和压缩功能的一种格式。(来源:http://blog.csdn.net/inkfish)

      因为本人在项目中需主要需要应用压缩工具对网络中传输的数据流进行压缩,因此重点关心对Stream的压缩,而不关心对多个文件的压缩,这在代码中也会有所体现。因此,本系列的代码一般仅适用于压缩流或压缩一个文件。(来源:http://blog.csdn.net/inkfish)

  LZMA、QuickLZ、LZO因为提供的类库不支持stream形式压缩或提供的example太难看懂,故不作测试。这里还有一个需要提醒,Apache commons compress的tar、zip、bzip2来最初源于ant,但经过项目间迁移、演化,API及性能有所不同。(来源:http://blog.csdn.net/inkfish)

  所有的格式均提供压缩和解压两个方法,再次提醒这里所有代码不适用于压缩多个文件、文件夹。下面是抽象的压缩、加压缩类:(来源:http://blog.csdn.net/inkfish)

package study.inkfish.compress;
import java.io.File;
import java.io.IOException;
public abstract class Compress {
public void compress(File srcFile, File destFile) {
destFile.getParentFile().mkdirs();
try {
doCompress(srcFile, destFile);
} catch (IOException ex) {
ex.printStackTrace();
}
}
public void decompress(File srcFile, File destDir) {
destDir.mkdirs();
try {
doDecompress(srcFile, destDir);
} catch (IOException ex) {
ex.printStackTrace();
}
}
protected int bufferLen = 1024 * 1024;//buffer size: 1MByte
protected abstract void doCompress(File srcFile, File destFile) throws IOException;
protected abstract void doDecompress(File srcFile, File destDir) throws IOException;
}

时间: 2024-11-02 13:47:48

Java压缩类库的使用-1.总述的相关文章

Java压缩类库的使用-5.性能检测

inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish ). 在选择压缩.打包算法的时候,不仅仅要选择算法,还需要选择用哪个实现类库,不同的实现类库实现效率不同,默认压缩比率不同.为了测试JDK.Ant.commons-compress在默认情况下的效率,设计了如下程序:(来源:http://blog.csdn.net/inkfish)   100M大小随机字符串文件生成程序:(来源:http://blog.csdn.net/inkfish

Java压缩类库的使用-4.Apache commons compress中的打包、压缩类库

inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish ). Apache commons compress BZIP2压缩:(来源:http://blog.csdn.net/inkfish) package study.inkfish.compress; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File;

Java压缩类库的使用-3.Apache Ant中的打包、压缩类库

inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish). 这里需要关注的是BZIP2格式,经过测试,总是无法正确压缩,原因未知,而apache commons bzip2格式的文件压缩正常.(来源:http://blog.csdn.net/inkfish) Ant ZIP压缩:(来源:http://blog.csdn.net/inkfish) package study.inkfish.compress; import java.io.B

Java压缩类库的使用-2.JDK中的打包、压缩类库

inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish). 这里忽略了jar,因为jar实质上属于zip压缩.(来源:http://blog.csdn.net/inkfish) JDK ZLIB压缩:(来源:http://blog.csdn.net/inkfish) package study.inkfish.compress; import java.io.BufferedInputStream; import java.io.Buffe

gizp-delphi7 如何解压java 压缩的 gzip字符串?我这里总提示data error

问题描述 delphi7 如何解压java 压缩的 gzip字符串?我这里总提示data error 5C 如题,哪位大神知道如何解压gzip字符串?初学delphi 求指导. 解决方案 雇佣一个程序员给你写一个解压缩的控件,你负责拖一个到你的窗口上. 解决方案二: 先试一下用winrar如果能正确解压的话,在delphi里用zlib库来解压

java压缩图片问题,白色背景图片

问题描述 java压缩图片问题,白色背景图片 原图:压缩后的图:就是背景是白色的图片(jpg格式),压缩后都会变颜色.不是白色背景的上传没问题.求解答 // 压缩代码 File file = new File(inputFilePath); if (!file.exists()) { SysUtil.printDebugLog(""=======源图片不存在====="" + inputFilePath); return false; } Image img = I

【秒懂设计模式】总述及工厂模式

秒懂设计模式--总述及工厂模式      [前言]每次一说道"设计模式"总会给人一种误区,认为这些东西,只有那些"技术大牛"才会玩的东西.但是给我的感觉却恰恰相反,它更应该是"非牛人"玩的东西.为什么这么说呢?打个比方吧,"设计模式"就好比武术中的"固定招式",只有新手会有板有眼,一招一式的照着做,而那些真正的武林高手,都是"无招胜有招"的.当这些东西烂熟于心,得心应手时,对这些所谓的设

java类的问题-java开发时,显示图片总要在放大或所放窗口后才会显示出来

问题描述 java开发时,显示图片总要在放大或所放窗口后才会显示出来 怎么解决java开发时,显示图片总要在放大或所放窗口后才会显示出来

java压缩文件

java的GZIP接口非常简单,所以如果只有单个数据流需要压缩(而不是一系列不同的数据),那么它就可能是最适当选择.下面是对单个文件进行压缩的例子:   //: GZIPcompress.java // Uses Java 1.1 GZIP compression to compress // a file whose name is passed on the command // line. import java.io.*; import java.util.zip.*; public c