一,gzip格式簡介
gzip是基于DEFLATE的壓縮文件格式。它由10字節(jié)的文件頭,可選的擴展頭,文件體(DEFLATE壓縮的數(shù)據(jù)),和8字節(jié)的尾注4個部分組成。現(xiàn)今已經(jīng)成為Internet 上使用非常普遍的一種數(shù)據(jù)壓縮格式。(http://zh.wikipedia.org/wiki/Gzip)
DEFLATE是同時使用了LZ77算法與Huffman編碼的字典型無損數(shù)據(jù)壓縮算法(先用lz77算法進行壓縮,然后對其結(jié)果再使用 Huffman編碼的方法進行壓縮)。DEFLATE最初是作為LZW以及其它受專利保護的數(shù)據(jù)壓縮算法的替代版本而設(shè)計的。當(dāng)時那些專利限制了壓縮算法的應(yīng)用,而DEFLATE則不受任何專利所制約。(http://zh.wikipedia.org/wiki/DEFLATE)
LZ77算法通過使用編碼器或者解碼器中已經(jīng)出現(xiàn)過的相應(yīng)匹配數(shù)據(jù)信息替換當(dāng)前數(shù)據(jù)(字典)從而實現(xiàn)壓縮功能。(http://zh.wikipedia.org/wiki/LZ77與LZ78)
Huffman編碼是一種用于無損數(shù)據(jù)壓縮的熵編碼(權(quán)編碼)算法。該方法完全依據(jù)字符出現(xiàn)概率來構(gòu)造異字頭的平均長度最短的碼字,有時稱之為最佳編碼。(http://zh.wikipedia.org/wiki/霍夫曼編碼)
二,J2ME與 gzip
zlib是使用DEFLATE算法,提供壓縮功能的函數(shù)庫。后來普遍為許多軟件所使用,逐漸成為事實上的業(yè)界標(biāo)準(zhǔn)。它是一個自由軟件,使用 zlib授權(quán)。(http://www.zlib.net/)
java4ever提供了一個非常小巧的用于J2ME的gzip解壓縮類庫,但它不支持壓縮。(http://www.java4ever.com/index.php?section=j2me&project;=gzip& amp;menu;=main〈=_en)
jzlib是zlib的Java實現(xiàn)版本。幸運的是,它只需要做簡單修改,即可用于J2ME。(http://www.jcraft.com /jzlib/)
J2ME Polish的源碼中也提供了一個不錯的gzip類庫。(http://www.j2mepolish.org)
三,實踐
1,將jzlib移植到J2ME
移植非常容易,僅需要將ZinputStream類中的FilterInputStream替換成InputStream即可。
代碼可從(http://code.google.com/p/jzlib4me/)獲取。其中有一個簡單的示范,請仔細(xì)查看代碼中的 README,跟去其中的描述選擇合適的使用方法。
2,使用J2ME Polish提供的gzip類庫
在J2ME Polish的de.enough.polish.util包中,提供了一個ZipUtil.java類。使用它可以很方便的進行g(shù)zip的壓縮與解壓。
例如:
ZipUtil.compress(byte[] data);
ZipUtil.decompress(byte[] data);
使用這兩個方法即可對data進行壓縮和解壓縮,并返回結(jié)果。
如果操作的數(shù)據(jù)比較大,可以使用de.enough.polish.util.zip包中的GZipInputStream和 GZipOutputStream對數(shù)據(jù)流進行壓縮和解壓
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。