winston 发表于 2011-12-16 11:38:11

zlib压缩算法 zhongguoren666

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;
compress(compr, &comprLen, (Bytef*)&(m_QualList), 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;
sf.Read(compr,len*sizeof(Byte));
uncompress((Bytef*)&(m_QualList), &uncomprLen, compr, len);
delete []compr;作者:zhongguoren666 发表于2011-12-16 9:44:16 原文链接
页: [1]
查看完整版本: zlib压缩算法 zhongguoren666