找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3560|回复: 0

zlib压缩算法 zhongguoren666

[复制链接]
发表于 2011-12-16 11:38:11 | 显示全部楼层 |阅读模式

Zlib

简介

    z1ib是一个免费、通用、不受任何法律阻碍的、无损的数据压缩开发库,而且还是跨平台的。这意味着任何人都可以修改、使用而无需交纳任何费用。ZLib具有同winzip和winrar等商业软件相比毫不逊色的压缩率,已经成功应用在诸如MySQL、Java、3DMax、甚至是微软的DirectX等大型的系统中。目前Z1ib的最新版本是1.2.3。

ZLib的最新版本可以在http://www.zlib.net下载,下载后的源代码包含Windows平台上Visual C++的 BYTE*lpd;工程文件,只需用Visual C++编译该工程即可得到开发所需的zlib.1ib以及z1ib.h文件 zconf.h;

    7z加解压速度太慢,既便极限压缩的很小,但在应用软件开发中实效性也是异常重要的,而且7z相当占cpu基于这些原因,再次找到了zlib算法。经过测试无论从性能还是压缩比。都不算太弱。


    例如 double数据转化成38万的Byte数据经过压缩后得到6.9万Byte数据;而WORD质量码数据10万,压缩后是118的Byte,你没看错,的确是118Byte!!zip的极限压缩也不比这强多少。测试数据73M的复合文档压缩后是9M(其中仅对数据和质量码进行过压缩,其余大概400K未压缩)。


//质量码
len = m_QualList.size();
sf.Write(&len,sizeof(int));//压缩前的长度
//压缩数据

uLong comprLen;
len = len*sizeof(WORD);
Byte * compr = new Byte[len];
compress(compr, &comprLen, (Bytef*)&(m_QualList[0]), len);
len = comprLen;
sf.Write(&len,sizeof(int));//压缩后的长度
sf.Write(compr,comprLen*sizeof(Bytef));
delete []compr;

----------------------------------------------------------------

uLong uncomprLen;

m_QualList.clear();
sf.Read(&len,sizeof(int));//压缩前的长度
m_QualList.resize(len);
sf.Read(&len,sizeof(int));//压缩后的长度
Byte * compr = new Byte[len];
sf.Read(compr,len*sizeof(Byte));
uncompress((Bytef*)&(m_QualList[0]), &uncomprLen, compr, len);
delete []compr;

作者:zhongguoren666 发表于2011-12-16 9:44:16 原文链接
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-4-29 00:41 , Processed in 0.012612 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表