添砖加瓦:snappy无损压缩算法

  一、简介

  Snappy(旧称:Zippy)是Google基于LZ77的思路用C++语言编写的快速数据压缩与解压程序库,并在2011年开源。其目标并非最大压缩率或与其他压缩程序的兼容性,而是非常高的速度和合理的压缩率。使用一个运行在64位模式下的酷睿i7处理器的单个核心,压缩速度250 MB/s,解压速度500 MB/s。压缩率比gzip低20-100%

  Snappy广泛应用在Google的项目,例如BigTable、MapReduce和Google内部RPC系统的压缩数据。它可在开源项目中使用,例如Cassandra、Hadoop、LevelDB、MongoDB、RocksDB和Lucene。[4]解压缩时会检测压缩流中是否存在错误。Snappy不使用内联汇编并且可移植。

  来源:维基百科

  二、安装

  1、下载:https://github.com/google/snappy.git

  2、安装CMake

  3、cd snappy && mkdir build && cd build && cmake ../ && make && make install

  三、测试

#include <iostream>
#include <string>
#include <snappy.h>
using namespace std;

int main(int argc,char* argv[])
{
    string input = "hello world";
    string output;

    for(int i = 0; i < 5; i++)
        input += input;

    snappy::Compress(input.data(),input.size(),&output);
    cout << "input size: " << input.size() << " output size: " << output.size() << endl;

    string output_uncom;
    snappy::Uncompress(output.data(),output.size(),&output_uncom);
    if(input == output_uncom)
        cout << "same" << endl;
    else
        cout << "not same" << endl;

    return 0;
}

  编译:g++ test.cpp -o test -lsnappy

时间: 2024-10-10 21:00:04

添砖加瓦:snappy无损压缩算法的相关文章

Zstandard:一种新的无损压缩算法

Zstandard(缩写为Zstd)是一种新的无损压缩算法,旨在提供快速压缩,并实现高压缩比.它既不像LZMA和ZPAQ那样追求尽可能高的压缩比,也不像LZ4那样追求极致的压缩速度. 下面是一组基准测试数据: 压缩算法名称 压缩比 压缩速度(MB/s) 解压速度(MB/s) zlib 1.2.8 -6 3.099 18 275 Zstd 2.872 201 498 zlib 1.2.8 -1 2.73 58 250 LZ4 HC r127 2.72 26 1720 QuickLZ 1.5.1b6

无损压缩算法历史

引言 无损压缩算法可行的基本原理是,任意一个非随机文件都含有重复数据,这些重复数据可以通过用来确定字符或短语出现概率的统计建模技术来压缩.统计模型可以用来为特定的字符或者短语生成代码,基于它们出现的频率,配置最短的代码给最常用的数据.这些技术包括熵编码(entropy encoding),游程编码(run-length encoding),以及字典压缩.运用这些技术以及其它技术,一个8-bit长度的字符或者字符串可以用很少的bit来表示,从而大量的重复数据被移除. 历史 直到20世纪70年代,数

几个常用快速无损压缩算法性能比较

SnappySnappy是在谷歌内部生产环境中被许多项目使用的压缩库,包括BigTable,MapReduce和RPC等.谷歌表示算法库针对性能做了调整,而不是针对压缩比或与其他类似工具的兼容性.在Intel酷睿i7处理器上,其单核处理数据流的能力达到250M/s-500M/s.Snappy同时针对64位x86处理器进行了优化,在英特尔酷睿i7处理器单一核心实现了至少250MB/s的压缩性能和500MB/ s的解压缩性能.Snappy对于纯文本的压缩率为1.5-1.7,对于HTML是2-4,当然

spice 图像压缩算法相关代码逻辑流程

下面是转载http://blog.csdn.net/zhoujiaxq/article/details/11201893 内容,是对图像算法的简单介绍接流程 目前的spice图像压缩主要采用了quic,glz和jpeg.quic和glz是无损压缩算法,quic主要用于照片,glz用于人工图像,jpeg也主要用于照片压缩但是是有损的.jpeg能节省50%的带宽,glz只能节省20%,但是jpeg会带来更大的开销,所以不能都使用jpeg进行压缩. spice官网对于广域网支持的介绍:http://s

无损数据压缩算法的历史

引言 有两种主要的压缩算法: 有损和无损.有损压缩算法通过移除在保真情形下需要大量的数据去存储的小细节,从而使文件变小.在有损压缩里,因某些必要数据的移除,恢复原文件是不可能的.有损压缩主要用来存储图像和音频文件,同时通过移除数据可以达到一个比较高的压缩率,不过本文不讨论无损压缩.无损压缩,也使文件变小,但对应的解压缩功能可以精确的恢复原文件,不丢失任何数据.无损数据压缩被广泛的应用在计算机领域,从节省你个人电脑的空间,到通过web发送数据.使用Secure Shell交流,查看PNG或GIF图

文本压缩算法的对比和选择

在数据压缩领域里,文本压缩的历史最久,从Morse到Huffman和算术编码(Arithmetic coding),再到基于字典和上下文的压缩算法.各种算法不断改进,从通用算法,到现在更具针对性的算法,结合应用场景的垂直化的趋势越来越明显.所以在选择或者评价压缩算法,一定要结合实际应用场景加以考虑,包括字符集.内容的大小.压缩及解压的性能.以及各端支持情况. 数据压缩算法 一套完整的压缩算法,实际以下几个部分:  其中除编码外的三项目的都是找到一个适于编码的表示方法,而编码则是以简化的方法进行输

LZ77压缩算法编码原理详解(结合图片和简单代码)

前言 LZ77算法是无损压缩算法,由以色列人Abraham Lempel发表于1977年.LZ77是典型的基于字典的压缩算法,现在很多压缩技术都是基于LZ77.鉴于其在数据压缩领域的地位,本文将结合图片和源码详细介绍其原理. 原理介绍: 首先介绍几个专业术语. 1.lookahead buffer(不知道怎么用中文表述,暂时称为待编码区): 等待编码的区域 2. search buffer: 已经编码的区域,搜索缓冲区 3.滑动窗口: 指定大小的窗,包含“搜索缓冲区”(左) + “待编码区”(右

iOS LZMA类压缩算法使用

LZMA(Lempel-Ziv-Markov chain-Algorithm的缩写)是2001年以来得到发展的一个数据压缩算法,它用于7-Zip归档工具中的7z格式和 Unix-like 下的 xz 格式.它使用类似于LZ77的字典编码机制,在一般的情况下压缩率比bzip2为高,用于压缩的字典文件大小可达4GB. C++语言写成的LZMA开放源码压缩库使用了区间编码支持的LZ77改进压缩算法以及特殊的用于二进制的预处理程序.LZMA 对数据流.重复序列大小以及重续序列位置单独进行了压缩.LZMA

利用CxImage实现编解码Gif图像代码举例

Gif(GraphicsInterchange Format,图形交换格式)是由CompuServe公司在1987年开发的图像文件格式,分为87a和89a两种版本.Gif是基于LZW算法的无损压缩算法.Gif图像是基于颜色表的,最多只支持8位(256色).Gif减少了图像调色板中的色彩数量,从而在存储时达到减少图像文件大小的目的.Gif分为静态Gif和动画Gif两种,扩展名为.gif,是一种压缩位图格式,支持透明背景图像,适用于多种操作系统. 下面利用CxImage开源库,实现对Gif图像进行编