分享

J2ME下的Zlib/Gzip/Zip压缩相关

 CevenCheng 2010-12-10
一,gzip格式简介
gzip是基于DEFLATE的压缩文件格式。它由10字节的文件头,可选的扩展头,文件体(DEFLATE压缩的数据),和8字节的尾注4个部分组成。现今已经成为Internet 上使用非常普遍的一种数据压缩格式。(http://zh./wiki/Gzip)

DEFLATE是同时使用了LZ77算法与Huffman编码的字典型无损数据压缩算法(先用lz77算法进行压缩,然后对其结果再使用 Huffman编码的方法进行压缩)。DEFLATE最初是作为LZW以及其它受专利保护的数据压缩算法的替代版本而设计的。当时那些专利限制了压缩算法的应用,而DEFLATE则不受任何专利所制约。(http://zh./wiki/DEFLATE)

LZ77算法通过使用编码器或者解码器中已经出现过的相应匹配数据信息替换当前数据(字典)从而实现压缩功能。(http://zh./wiki/LZ77与LZ78)

Huffman编码是一种用于无损数据压缩的熵编码(权编码)算法。该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码。(http://zh./wiki/霍夫曼编码)

二,J2ME与 gzip

zlib是使用DEFLATE算法,提供压缩功能的函数库。后来普遍为许多软件所使用,逐渐成为事实上的业界标准。它是一个自由软件,使用 zlib授权。(http://www./)
java4ever提供了一个非常小巧的用于J2ME的gzip解压缩类库,但它不支持压缩。(http://www./index.php?section=j2me&project;=gzip& amp;menu;=main〈=_en)
jzlib是zlib的Java实现版本。幸运的是,它只需要做简单修改,即可用于J2ME。(http://www. /jzlib/)
J2ME Polish的源码中也提供了一个不错的gzip类库。(http://www.)
三,实践

1,将jzlib移植到J2ME
移植非常容易,仅需要将ZinputStream类中的FilterInputStream替换成InputStream即可。
代码可从(http://code.google.com/p/jzlib4me/)获取。其中有一个简单的示范,请仔细查看代码中的 README,跟去其中的描述选择合适的使用方法。

2,使用J2ME Polish提供的gzip类库
在J2ME Polish的de.enough.polish.util包中,提供了一个ZipUtil.java类。使用它可以很方便的进行gzip的压缩与解压。

例如:
ZipUtil.compress(byte[] data);
ZipUtil.decompress(byte[] data);
使用这两个方法即可对data进行压缩和解压缩,并返回结果。
如果操作的数据比较大,可以使用de.enough.polish.util.zip包中的GZipInputStream和 GZipOutputStream对数据流进行压缩和解压

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多