Windows Mobile下使用ZLIB压缩

前言:
    在当前手机应用中,可能压缩技术不太引起重视,但是我们可以注意到一点,当手机与服务器进行通信的时候,速度与稳定性是非常重要,在这一环节中,我们如果把原文件(或者原内容)直接发送到服务器,不仅耗费不少流量(在当前流量费不便宜的情况下,这种情况能避免就尽量避免),而且传输的速度慢,消耗的时间长,也有可能产生传输不完整等一系列缺点。所以如果我们采用压缩技术,把要传输到服务器的内容进行压缩,可以减少传输数据量,减少传输时间,提高数据的稳定性,何乐不为!

 

文章介绍:
    采用ZLIB开源进行数据的压缩,比较压缩后内容的大小及传输的时间多少,暂时忽略终端与服务器端压缩与解压缩消耗的时间。

测试平台:
     VS 2005 + WM 6.0 

开发语言:
     C ++

正文:
    1. 下载ZLIB包:http://www.tenik.co.jp/~adachi/wince/zlibce/index.html。选择第三项zlib for WindowsCE Ver.1.1.4(with binaries)。
    2. 下载到本地后解开,在zlibce目录下,有头文件zconf.h和zlib.h;在zlibce\WCE400\ARMV4I下有库文件 zlibce.lib。
    3. 在VS2005下新建一个智能设备项目,设为对话框工程。
    4. 把第2步说到的头文件与库文件复制到工程文件夹中并且在项目中添加以上文件。
    5. 在对话框头文件上添加以下代码,把库文件与头文件载入项目中:
       #include "zlib.h" 
       #pragma comment(lib , "zlibce.lib")
    6. 把一个文本文件,例如test.txt复制到测试手机的My Documents目录下,当前测试的test.txt文件大小为92.8K。
    7. 在OnInitDialog函数中添加以下代码:
       读取文件:

int nLen;  
char *pBuf;  
CFile cf;  
cf.Open(L"\\My Documents\\test.txt", CFile::modeRead);  
nLen = cf.GetLength();  
pBuf = new char[nLen];  
cf.Read(pBuf, nLen); 
压缩:

gzFile zipFile = gzopen("\\My Documents\\test.gz", "wb");  
gzwrite(zipFile, (voidp)pBuf, nLen);  
gzclose(zipFile);

 8. 启动调试

 

总结:
    压缩前文本文件为92.8K,压缩后文件为15.3K,可见压缩比例是接近1:6,通过发送到服务器的时间作一个比较,压缩前发送到服务器消耗时间为33285MS,压缩后发送到服务消耗时间为7214MS,可见发送的时间也大大缩小,有利于我们建立高速稳定的通信环境。

posted @ 2010-11-11 13:01  Eric_Su  阅读(1660)  评论(0编辑  收藏  举报