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压缩/解压库的更多相关文章

  1. .NET 压缩解压库发布,支持进度查看

    刚发布了一个 .net压缩解压库,基于SharpZipLib开发 ,支持进度查看,支持路径保持与否. CL.IO.Zip 是一个基于SharpZipLib的一个压缩和解压的类库,提供给用户在.net环 ...

  2. [转]Snappy压缩库安装和使用之一

    Snappy压缩库安装和使用之一 原文地址:http://blog.csdn.net/luo6620378xu/article/details/8521223 近日需要在毕业设计中引入一个压缩库,要求 ...

  3. Snappy压缩

    Snappy压缩时,碰到不能解压问题,所用服务器Tomcat8.经验证,降低Tomcat版本为7,才可正常解压文件. 若碰到偶尔不能解压的问题,试着换个浏览器试试.

  4. .NET使用ICSharpCode.SharpZipLib压缩/解压文件

    SharpZipLib是国外开源加压解压库,可以方便的对文件进行加压/解压 1.下载ICSharpCode.SharpZipLib.dll,并复制到bin目录下 http://www.icsharpc ...

  5. Linux 压缩解压

    压缩解压 ------------------------------------------ linux 下所有的压缩格式,WinRAR 都支持 gzip .gz 格式 压缩文件: gzip 文件名 ...

  6. SAPCAR 压缩解压软件的使用方法

    SAPCAR 是 SAP 公司使用的压缩解压软件,从 SAP 网站下载的补丁包和小型软件基本都是扩展名为 car 或 sar 的,它们都可以用 SAPCAR 来解压.下面是它的使用说明: 用法: 创建 ...

  7. 对称加密之AES、压缩解压以及压缩加密解密解压综合实战

    AES 压缩解压 压缩加密解密解压 对称加密: 就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密.密钥是控制加密及解密过程的指令.算法是一组规则,规定如何进行加密和解密.   因此加密的安 ...

  8. linux笔记:linux常用命令-压缩解压命令

    压缩解压命令:gzip(压缩文件,不保留原文件.这个命令不能压缩目录) 压缩解压命令:gunzip(解压.gz的压缩文件) 压缩解压命令:tar(打包压缩目录或者解压压缩文件.打包的意思是把目录打包成 ...

  9. linux驱动系列之文件压缩解压小节(转)

    转至网页:http://www.jb51.net/LINUXjishu/43356.html Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通 ...

随机推荐

  1. docker 修改容器配置文件

    启动docker镜像命令docker run 可以指定端口映射,但是容器一旦创建就无法在通过命令修改.通常是保存镜像在创建一个新的容器.有没有办法不保存镜像直接修改这个容器呢?答案是有的,本文已mys ...

  2. 洛谷P1712 [NOI2016]区间 尺取法+线段树+离散化

    洛谷P1712 [NOI2016]区间 noi2016第一题(大概是签到题吧,可我还是不会) 链接在这里 题面可以看链接: 先看题意 这么大的l,r,先来个离散化 很容易,我们可以想到一个结论 假设一 ...

  3. leetcode刷题-54螺旋矩阵

    题目 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 思路 对于每个外层,从左上方开始以顺时针的顺序遍历所有元素.假设当前层的左上角位于(to ...

  4. 洛谷 P4072 [SDOI2016]征途 斜率优化DP

    洛谷 P4072 [SDOI2016]征途 斜率优化DP 题目描述 \(Pine\) 开始了从 \(S\) 地到 \(T\) 地的征途. 从\(S\)地到\(T\)地的路可以划分成 \(n\) 段,相 ...

  5. day09记录

    今日内容大纲 毒鸡汤课 坚持.努力! 生成器 yield yeild return yeild from 生成器表达式 内置函数I 昨日内容回顾作业讲解 可迭代对象 可以更新得带的 实实在在的值. 内 ...

  6. SpringBoot(20)---断言(Assert)

    SpringBoot(20)---断言(Assert) 我们在写单元测试的时候,除了接口直接抛异常而导致该单元测试失败外,还有种是业务上的错误也代表着该单元测试失败.好比我们在测试接口的时候, 该接口 ...

  7. Linux高级命令进阶

    输出重定向 场景:一般命令的输出都会显示在终端中,有些时候需要将一些命令的执行结果想要保存到文件中进行后续的分析/统计,则这时候需要使用到的输出重定向技术. >:覆盖输出,会覆盖掉原先的文件内容 ...

  8. python温度转换代码分析

    将用户输入的温度信息保存在TempStr变量中 if分支条件,判断TempStr类型是否在f及F列表之中 如果用户输入的在f及F列表之中,则用户输入的是一个华氏温度值,对华氏温度进行摄氏温度的转换,e ...

  9. 使用swagger遇到的问题

    1.定义全局的请求参数时, defaultValue不能是中文,不然一直是请求中 ParameterBuilder userName = new ParameterBuilder(); Paramet ...

  10. 企业项目实战 .Net Core + Vue/Angular 分库分表日志系统一 | 前言

    教程预览 01 | 前言 02 | 简单的分库分表设计 03 | 控制反转搭配简单业务 04 | 强化设计方案 05 | 完善业务自动创建数据库 06 | 最终篇-通过AOP自动连接数据库-完成日志业 ...