Symbian中的数据压缩(GZIP)
来源:互联网 发布:网络信号屏蔽设置 编辑:程序博客网 时间:2024/06/05 08:30
转自:http://hi.baidu.com/letsherwel/blog/item/5ebf71ded4d4c953cdbf1a7c.html
用到的类:CEZCompressor、CEZDecompressor、MEZBufferManager、CEZZStream和CBufFlat。
//压缩
CBufFlat* Compress(const TDesC8& aData)
{
CBufFlat* nOutBuf = CBufFlat::NewL(128);
CBufferManager* nBufferManager = CBufferManager::NewLC(aData,*nOutBuf, 128);
CEZCompressor* compressor = CEZCompressor::NewLC(*nBufferManager, CEZCompressor::EBestCompression);
while (compressor->DeflateL())
{// loop here until the file is compressed
}
CleanupStack::PopAndDestroy(2); //compressor,nBufferManager
nOutBuf->Compress();
return nOutBuf;
} //解压缩
CBufFlat* DeCompress(const TDesC8& aData)
{
CBufFlat* nOutBuf = CBufFlat::NewL(128);
CBufferManager *nBufferManager = CBufferManager::NewLC(aData,*nOutBuf,128);
CEZDecompressor *decompressor = CEZDecompressor::NewLC(*nBufferManager);
while (decompressor->InflateL())
{// loop here until the file is decompressed
}
CleanupStack::PopAndDestroy(2); //decompressor,bufManager
return nOutBuf;
}
其中“CBufferManager”继承自“MEZBufferManager”,该类的源代码如下:
#ifndef __BUFFERMANAGER_H__
#define __BUFFERMANAGER_H__
#include <EZCompressor.h>
#include <EZDecompressor.h>
#include <EZlib.h>
class CBufferManager : public CBase, public MEZBufferManager
{
public:
static CBufferManager* NewLC(const TDesC8& aInput, CBufFlat& aOutput, TInt aBufferSize = 64);
static CBufferManager* NewL(const TDesC8& aInput, CBufFlat& aOutput, TInt aBufferSize = 64);
~CBufferManager();
private:
CBufferManager(CBufFlat& aOutput);
void ConstructL(const TDesC8& aInput, TInt aBufferSize);
public: //from MEZBufferManager
void InitializeL(CEZZStream &aZStream);
void NeedInputL(CEZZStream &aZStream);
void NeedOutputL(CEZZStream &aZStream);
void FinalizeL(CEZZStream &aZStream);
private:
HBufC8* iInput;
CBufFlat& iOutput;
TInt iBufferSize;
TUint8* iInputBuffer;
TUint8* iOutputBuffer;
TPtr8 iInputDescriptor; // always points to start of the input Buffer
TPtr8 iOutputDescriptor; // always points to start of the output Buffer
};
#endif //__BUFFERMANAGER_H__
#include "BufferManager.h"
CEZZStream::CEZZStream()
:iOutputPointer(NULL), iOutputBufferLength(0)
{
}
CBufferManager* CBufferManager::NewL(const TDesC8& aInput, CBufFlat& aOutput, TInt aBufferSize)
{
CBufferManager* self = CBufferManager::NewLC(aInput, aOutput, aBufferSize);
CleanupStack::Pop();
return self;
}
CBufferManager* CBufferManager::NewLC(const TDesC8& aInput, CBufFlat& aOutput, TInt aBufferSize)
{
CBufferManager* self = new (ELeave) CBufferManager(aOutput);
CleanupStack::PushL(self);
self->ConstructL(aInput, aBufferSize);
return self;
}
void CBufferManager::ConstructL(const TDesC8& aInput, TInt aBufferSize)
{
if(aBufferSize <= 0)
{
User::Leave(KErrArgument);
}
iBufferSize = aBufferSize;
iInputBuffer = new (ELeave) TUint8[iBufferSize];
iOutputBuffer = new (ELeave) TUint8[iBufferSize];
iInputDescriptor.Set(iInputBuffer, 0, iBufferSize);
iOutputDescriptor.Set(iOutputBuffer, 0, iBufferSize);
iInput = HBufC8::NewL(aInput.Length());
*iInput = aInput;
}
CBufferManager::~CBufferManager()
{
delete [] iInputBuffer;
delete [] iOutputBuffer;
delete iInput;
}
CBufferManager::CBufferManager(CBufFlat& aOutput)
:iOutput(aOutput), iInput(NULL), iInputDescriptor(NULL,0), iOutputDescriptor(NULL,0)
{
}
void CBufferManager::InitializeL(CEZZStream& aZStream)
{
NeedInputL(aZStream);
aZStream.SetOutput(iOutputDescriptor);
}
void CBufferManager::NeedInputL(CEZZStream& aZStream)
{
TInt length = (iBufferSize > iInput->Length()) ? iInput->Length() : iBufferSize;
iInputDescriptor.Copy((TUint8*)iInput->Des().Ptr(), length);
iInput->Des().Delete(0, length);
aZStream.SetInput(iInputDescriptor);
}
void CBufferManager::NeedOutputL(CEZZStream& aZStream)
{
TPtrC8 od = aZStream.OutputDescriptor();
iOutput.InsertL(iOutput.Size(), od);
aZStream.SetOutput(iOutputDescriptor);
}
void CBufferManager::FinalizeL(CEZZStream& aZStream)
{
TPtrC8 od = aZStream.OutputDescriptor();
iOutput.InsertL(iOutput.Size(), od);
}
- Symbian中的数据压缩(GZIP)
- Symbian中的文件压缩(GZIP)
- 举例实现Android网络数据传输中的Gzip数据压缩
- GZIP数据压缩/解压工具
- 使用动态代理进行GZIP数据压缩过滤
- 使用包装模式进行GZIP数据压缩过滤
- ASIHTTPRequest中数据压缩问题与gzip
- Java GZip数据压缩传输到前台
- 数据压缩(Gzip),重定向,转发,图片下载
- 网络爬虫--网页数据压缩(python deflate gzip)
- SQL SERVER系列(三):SQL Server 2008中的数据压缩
- Swish-e搜索引擎中的数据压缩算法(一)
- Swish-e搜索引擎中的数据压缩算法(二)
- iOS 数据请求 GZip数据压缩和解压缩问题
- gsoap:启用http compression(gzip)进行数据压缩传输
- symbian压缩和解压缩GZIP文件
- Symbian 压缩和解压缩GZIP文件
- 实时数据库中的数据压缩技术
- RESPONSE.WRITE和%=%效率分析
- STL--stack/queue的使用方法
- 开始努力 【BUPT_OJ 1000】
- Symbian中的文件压缩(GZIP)
- 对Lab颜色空间的学习(转)
- Symbian中的数据压缩(GZIP)
- SQL SERVER 的SQL语句整理
- 约瑟夫问题(POJ2746;PG1078)
- 使用C# 创建邮件发送组件(SMTP协议)
- SQL Server索引简介
- 赛孚耐:三套方案应对云安全
- Ansi,Unicode(little endian),Unicode big endian,UTF-8编码文件相互转换
- 分页存储过程
- WPF与Win32——《IT168》