snappy压缩/解压库
snappy
snappy是由google开发的压缩/解压C++库,注重压缩速度,压缩后文件大小比其它算法大一些
snappy在64位x86并且是小端的cpu上性能最佳
- 在Intel(R) Core(TM)2 2.4GHz中测试数据:
压缩速率:~200-500MB/s
解压速率:~400-800MB/s - 压缩比(压缩数据大小/原始数据大小):
对于HTML:~25%
对于普通文本(plain text):~50%
对于JPEG等已经压缩过的文件:~100%
压缩/解压demo
/**
* 压缩数据
* @param bs 输入的字节数组
* @return 经过压缩的数据
*/
Bytes SnappyCompress::compress(BytesConstRef bs) {
// 提前分配足够的空间
Bytes ret(snappy::MaxCompressedLength(bs.size()));
size_t compressedLen = 0;
// 进行压缩
snappy::RawCompress(
reinterpret_cast<const char*>(bs.data()),
bs.size(),
reinterpret_cast<char*>(ret.data()),
&compressedLen
);
// 调整为实际的压缩长度
ret.resize(compressedLen);
return ret;
}
/**
* 解压数据
* @param bs 经过压缩的字节数组
* @return 经过解压的数据
* @throw 输入的压缩数据损坏抛出CorruptedInput异常
*/
Bytes SnappyCompress::uncompress(BytesConstRef bs) {
// 解析出解压数据的长度(花费O(1)时间)
size_t uncompressedLen = 0;
bool status = snappy::GetUncompressedLength(
reinterpret_cast<const char*>(bs.data()),
bs.size(),
&uncompressedLen
);
if (!status) {
// 解析长度编码出错
throw CorruptedInput();
}
// 提前分配空间
Bytes ret(uncompressedLen);
// 进行解压
status = snappy::RawUncompress(
reinterpret_cast<const char*>(bs.data()),
bs.size(),
reinterpret_cast<char*>(ret.data())
);
if (!status) {
// 压缩数据损坏
throw CorruptedInput();
}
return ret;
}
snappy压缩/解压库的更多相关文章
- .NET 压缩解压库发布,支持进度查看
刚发布了一个 .net压缩解压库,基于SharpZipLib开发 ,支持进度查看,支持路径保持与否. CL.IO.Zip 是一个基于SharpZipLib的一个压缩和解压的类库,提供给用户在.net环 ...
- [转]Snappy压缩库安装和使用之一
Snappy压缩库安装和使用之一 原文地址:http://blog.csdn.net/luo6620378xu/article/details/8521223 近日需要在毕业设计中引入一个压缩库,要求 ...
- Snappy压缩
Snappy压缩时,碰到不能解压问题,所用服务器Tomcat8.经验证,降低Tomcat版本为7,才可正常解压文件. 若碰到偶尔不能解压的问题,试着换个浏览器试试.
- .NET使用ICSharpCode.SharpZipLib压缩/解压文件
SharpZipLib是国外开源加压解压库,可以方便的对文件进行加压/解压 1.下载ICSharpCode.SharpZipLib.dll,并复制到bin目录下 http://www.icsharpc ...
- Linux 压缩解压
压缩解压 ------------------------------------------ linux 下所有的压缩格式,WinRAR 都支持 gzip .gz 格式 压缩文件: gzip 文件名 ...
- SAPCAR 压缩解压软件的使用方法
SAPCAR 是 SAP 公司使用的压缩解压软件,从 SAP 网站下载的补丁包和小型软件基本都是扩展名为 car 或 sar 的,它们都可以用 SAPCAR 来解压.下面是它的使用说明: 用法: 创建 ...
- 对称加密之AES、压缩解压以及压缩加密解密解压综合实战
AES 压缩解压 压缩加密解密解压 对称加密: 就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密.密钥是控制加密及解密过程的指令.算法是一组规则,规定如何进行加密和解密. 因此加密的安 ...
- linux笔记:linux常用命令-压缩解压命令
压缩解压命令:gzip(压缩文件,不保留原文件.这个命令不能压缩目录) 压缩解压命令:gunzip(解压.gz的压缩文件) 压缩解压命令:tar(打包压缩目录或者解压压缩文件.打包的意思是把目录打包成 ...
- linux驱动系列之文件压缩解压小节(转)
转至网页:http://www.jb51.net/LINUXjishu/43356.html Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通 ...
随机推荐
- 2020云栖大会智慧出行专场:聚焦高精地图/算法、智能模型、自动驾驶、AR导航
2020云栖大会将于9月17日-18日在线举行,届时将通过官网为全球科技人带来前沿科技.技术产品.产业应用等领域的系列重要分享. 阿里巴巴高德地图携手合作伙伴精心筹备了“智慧出行”专场.我们将为大 ...
- synchronized的实现原理——锁膨胀过程
@ 目录 前言 正文 偏向锁 轻量锁 批量重偏向 批量撤销 重量锁 总结 前言 上一篇分析了优化后的synchronized在不同场景下对象头中的表现形式,还记得那个结论吗?当一个线程第一次获取锁后再 ...
- IT行业程序开发如何
学习程序开发怎么样,由于软件开发涉及到的知识结构比较丰富,所以学习软件开发通常需要一个系统的学习过程.如果未来要想专业从事软件开发工作,那么可以按照以下步骤学习软件开发技术: 第一:从计算机操作系统开 ...
- python里面的project、package、module分别是什么
2020/5/25 1.project(项目) project 即项目,是一个很大的文件夹,里面有好多的 .py 文件. 在Spyder 中点击菜单栏 projects -----> new ...
- Python实现GUI开发 PySide2&PyQt环境配置
更新于2020-09-15 - 18:50:37 [前言] 关于Python开发GUI图形界面程序的问题,大概是19年十分困扰我,主要是没有经验以及缺乏高效简洁的视频或教学文档,导致在19年中秋前后花 ...
- k8s数据管理(八)
volume 我们经常会说:容器和 Pod 是短暂的.其含义是它们的生命周期可能很短,会被频繁地销毁和创建.容器销毁时,保存在容器内部文件系统中的数据都会被清除. 为了持久化保存容器的数据,可以使用 ...
- Linux里隐藏的计算器,你知道它的奥秘吗?
Linux里隐藏的计算器,你知道它的奥秘吗? 大家都知道,windows下有个计算器工具,我们在工作生活中经常使用到它.但是,你可知Linux下也同样有个计算器吗? 当然,良许说的是命令行下的计算器工 ...
- jekins使用的坑
1.日志打满 一个周末回来,服务器的磁盘就写满了 现象如下,最后是修改catalina脚本 添加了如下配置 ###jekins log problem#########export JAVA_OPTS ...
- ams入门了解
另一篇介绍文 https://www.cnblogs.com/clds/p/4985893.html 转载自https://www.cnblogs.com/onlysun/p/4533798.htm ...
- 说说我对 WSGI 的理解
先说下 WSGI 的表面意思,Web Server Gateway Interface 的缩写,即 Web 服务器网关接口. 之前不知道 WSGI 意思的伙伴,看了上面的解释后,我估计也还是不清楚,所 ...