DEVDIV.COM

Rank: 3Rank: 3Rank: 3

UID
10738
分享
0
好友
0
记录
0
相册
0
txdz 发表于 2010-3-7 02:24:41 |显示全部楼层
我在收到网络传来的GZIP压缩流后,使用下面的方法,怎么也解压不了:
        iEngine->iDeCompressor->SetInput(iDest->Des());
            iEngine->iDeCompressor->SetOutput(iSrcPtr);
            TInt derr = 1;
            while(derr)
            {
                  derr = iEngine->iDeCompressor->InflateL();
            }
但总是解压不了。请教于高手啊!

分享到:

Rank: 100Rank: 100Rank: 100Rank: 100

UID
9147
分享
0
好友
138
记录
0
相册
0
Mark15021 发表于 2010-3-7 07:58:23 |显示全部楼层
小弟也试过,没有成功
期待高手,顶楼主哥一把.
实在不行的话.把开源的ZLIB移植过去.
难度不大.大小在8K左右

Rank: 20Rank: 20Rank: 20Rank: 20

UID
10874
分享
0
好友
6
记录
0
相册
0
hqoksoft 发表于 2010-3-7 09:21:00 |显示全部楼层


一般都是这样的啦,移植一个开源的zip库,很简单的,接口转一下就行了。

请不要因为我是娇花而怜惜我

Rank: 25

UID
11498
分享
0
好友
20
记录
0
相册
1

十级贡献勋章 九级光辉勋章 八级荣誉勋章 七级卓越勋章 六级尊贵勋章 五级至尊勋章

bestzld 发表于 2010-3-7 22:33:57 |显示全部楼层
干嘛非要在内存中   先弄个临时文件好了……我以前就是这么做的,貌似速度是可以接受的

Rank: 5

UID
12308
分享
0
好友
1
记录
0
相册
0
Snow 发表于 2010-3-7 22:54:10 |显示全部楼层
解压不了的原因是不是网络传过来的压缩流包含了压缩的头信息呀?把这些头信息去掉再试试。我原先就是因为这个原因解压不了。要不你就按“bestzld”的方法来弄。
你看一下这个帖子,希望对你有帮助。
http://discussion.forum.nokia.com/forum/showthread.php?p=201035

Rank: 3Rank: 3Rank: 3

UID
10738
分享
0
好友
0
记录
0
相册
0
txdz 发表于 2010-3-8 05:50:30 |显示全部楼层


谢谢楼上。其实我上面的代码没错,内存流方式貌似成功,但不是GZIP压缩,可以压缩解压。
但是,得到的不是GZIP数据格式。
后来还是通过“临时文件”方式搞定了。干脆把代码放在这里,也许有点参考价值:

                        // 获取返回的Gzip压缩数据
                        iEngine->RecvInfoL();
                        const TDesC8& respStr8 = iEngine->RecvData();
                        TBuf8<1200> respStr_1;
                        respStr_1.Copy(respStr8);
                        //收到的压缩数据写入一个临时文件,10个字节的头部信息后才是压缩流
                        RFs& fs = iCoeEnv->FsSession();
                        RFile iGzipFile;
                        _LIT(KGZIPFileName, "c:\\test_gzip.gz");
                        User::LeaveIfError(iGzipFile.Replace(fs, KGZIPFileName, EFileWrite|EFileStream|EFileShareAny));
                        TUint8* en_ptr = const_cast<TUint8*>(respStr_1.Ptr());
                        en_ptr = en_ptr + 10;
                        TPtr8 en_data(en_ptr, respStr_1.Length()-10, respStr_1.MaxLength()-10);
                        iGzipFile.Write(en_data, respStr_1.Length()-10);
                        iGzipFile.Close();
                        //解压出一个临时文件
                        RFile iUnGzipFile;
                        _LIT(KUNGZIPFileName, "c:\\test_ungzip.tmp");
                        User::LeaveIfError(iUnGzipFile.Replace(fs, KUNGZIPFileName, EFileWrite|EFileStream|EFileShareAny));
                        TInt aBufferSize=0x8000;
                        CleanupClosePushL(iUnGzipFile);
                        CEZGZipToFile *decompressor = CEZGZipToFile::NewLC(fs, KGZIPFileName, iUnGzipFile,aBufferSize);
                        while(decompressor->InflateL())
                        {
                        }
                        iUnGzipFile.Flush();
                        //读解压后的临时文件
                        TInt aFileSize;
                        iUnGzipFile.Size(aFileSize);
                        TBuf8<1200> ugBuf;
                        TInt aSeek = 0;
                        iUnGzipFile.Seek( ESeekStart, aSeek );
                        iUnGzipFile.Read(ugBuf ,aFileSize);
                        iUnGzipFile.Close();
                        CleanupStack::PopAndDestroy(2);


Rank: 3Rank: 3Rank: 3

UID
10738
分享
0
好友
0
记录
0
相册
0
txdz 发表于 2010-3-8 05:54:37 |显示全部楼层



弄了好几天啊,终于搞定了。高手别笑哦。

Rank: 100Rank: 100Rank: 100Rank: 100

UID
11179
分享
0
好友
27
记录
4
相册
1

十级贡献勋章 七级卓越勋章

deavey 发表于 2010-3-8 05:57:16 |显示全部楼层

Rank: 100Rank: 100Rank: 100Rank: 100

UID
9147
分享
0
好友
138
记录
0
相册
0
Mark15021 发表于 2010-3-8 05:59:22 |显示全部楼层
很帅,很帅楼主哥!!
晚上回去学习学习。
你的c:\\test_gzip.gz这个文件从哪里来的?我自己用zlib压缩文件后,解压有问题!!

Rank: 3Rank: 3Rank: 3

UID
10738
分享
0
好友
0
记录
0
相册
0
txdz 发表于 2010-3-8 22:20:16 |显示全部楼层
此代码只针对单一压缩流而言。c:\\test_gzip.gz可以从无到有啊,临时生成的

Rank: 3Rank: 3Rank: 3

UID
10738
分享
0
好友
0
记录
0
相册
0
txdz 发表于 2010-3-21 04:05:30 |显示全部楼层



终于,不使用文件缓存方式
实现了的内存解压
过几天再实现内存压缩。

Rank: 5

UID
7523
分享
0
好友
0
记录
0
相册
0
sheen 发表于 2010-4-11 13:49:22 |显示全部楼层
ls,怎么去掉前10字节啊?aBuf.Mid(10)可以吗?

Rank: 50Rank: 50

UID
13435
分享
0
好友
66
记录
1
相册
1

三级英豪勋章 四级英才勋章 DD博主 世界杯

Flying 发表于 2010-4-11 14:00:38 |显示全部楼层
ohye,http get得到的gzip压缩的数据可以解压了。

Rank: 5

UID
7523
分享
0
好友
0
记录
0
相册
0
sheen 发表于 2010-4-11 14:14:31 |显示全部楼层
ls能仔细说说吗?如何不通过文件直接解压啊

Rank: 50Rank: 50

UID
22505
分享
0
好友
34
记录
0
相册
1

十级贡献勋章 九级光辉勋章

LostHubi 发表于 2010-4-12 10:45:23 |显示全部楼层
.....
被人挖出来了

Rank: 10Rank: 10

UID
11013
分享
0
好友
0
记录
0
相册
0

十级贡献勋章 九级光辉勋章 八级荣誉勋章 七级卓越勋章

feetbig 发表于 2010-7-19 02:38:45 |显示全部楼层
拜楼主啊~我也遇到同样的问题,看了楼主的帖子才知道原来网络传过来的数据有个10字节的头,1F8B08,去掉就能解压了。。

Rank: 10Rank: 10

UID
40498
分享
0
好友
10
记录
1
相册
0
geteng 发表于 2011-1-24 17:26:46 |显示全部楼层
怎么解压的啊 我也需要

苦工,糊口。
您需要登录后才可以回帖 登录 | 注册

回顶部