前言:
在當前手機應用中,可能壓縮技術不太引起重視,但是我們可以注意到一點,當手機與伺服器進行通訊的時候,速度與穩定性是非常重要,在這一環節中,我們如果把原檔案(或者原內容)直接發送到伺服器,不僅耗費不少流量(在當前流量費不便宜的情況下,這種情況能避免就盡量避免),而且傳輸的速度慢,消耗的時間長,也有可能產生傳輸不完整等一系列缺點。所以如果我們採用壓縮技術,把要傳輸到伺服器的內容進行壓縮,可以減少傳輸資料量,減少傳輸時間,提高資料的穩定性,何樂不為!
文章介紹:
採用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,可見發送的時間也大大縮小,有利於我們建立高速穩定的通訊環境。