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