Java壓縮類庫的使用-1.總述
inkfish原創,請勿商業性質轉載,轉載請注明來源(https://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壓縮。(來源:https://blog.csdn.net/inkfish)
嚴格來說,TAR、AR、CPIO並不屬於壓縮軟件,而是一種打包軟件,它能把很多文件、文件夾打包成一個文件,供壓縮程序壓縮。而咱們在windows中熟悉的zip、rar,嚴格的說是具備打包和壓縮功能的一種格式。(來源:https://blog.csdn.net/inkfish)
因為本人在項目中需主要需要應用壓縮工具對網絡中傳輸的數據流進行壓縮,因此重點關心對Stream的壓縮,而不關心對多個文件的壓縮,這在代碼中也會有所體現。因此,本係列的代碼一般僅適用於壓縮流或壓縮一個文件。(來源:https://blog.csdn.net/inkfish)
LZMA、QuickLZ、LZO因為提供的類庫不支持stream形式壓縮或提供的example太難看懂,故不作測試。這裏還有一個需要提醒,Apache commons compress的tar、zip、bzip2來最初源於ant,但經過項目間遷移、演化,API及性能有所不同。(來源:https://blog.csdn.net/inkfish)
所有的格式均提供壓縮和解壓兩個方法,再次提醒這裏所有代碼不適用於壓縮多個文件、文件夾。下麵是抽象的壓縮、加壓縮類:(來源:https://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; }
最後更新:2017-04-02 04:01:44