Zstandard(Zstd)新型压缩算法代替Zlib 简单使用教程
2017-12-07 22:29
399 查看
欢迎访问我的个人博客 ,原文链接
Zstandard使用字典算法(LZ77)结合熵编码法的有限状态熵(tANS)。—–Wikipedia
GitHub上的zstd页面
- 在项目中包含头文件#include “zstd/zstd.h”
- #pragma comment(lib,”libzstd.lib”);
- 在项目exe目录下面加入libzstd.dll文件
- 在项目lib文件夹(或者其他什么文件夹)加入libzstd.lib
压缩流程:
- 使用ZSTD_compressBound获取最大压缩缓冲区大小,然后申请缓冲区;
- 使用ZSTD_compress进行压缩
解压流程:
- 可以使用ZSTD_getDecompressedSize来获取压缩后最大缓冲区大小;来申请解压缓冲区;
简介
Zstandard(缩写为Zstd)是由Facebook的Yann Collet开发的一个无损数据压缩算法。Zstandard在设计上与DEFLATE(.zip、gzip)算法有着差不多的压缩比,但有更高的压缩和解压缩速度。Zstandard使用字典算法(LZ77)结合熵编码法的有限状态熵(tANS)。—–Wikipedia
GitHub上的zstd页面
Compressor name | Ratio | Compression | Decompress. |
---|---|---|---|
zstd 1.1.3 -1 | 2.877 | 430 MB/s | 1110 MB/s |
zlib 1.2.8 -1 | 2.743 | 110 MB/s | 400 MB/s |
brotli 0.5.2 -0 | 2.708 | 400 MB/s | 430 MB/s |
quicklz 1.5.0 -1 | 2.238 | 550 MB/s | 710 MB/s |
lzo1x 2.09 -1 | 2.108 | 650 MB/s | 830 MB/s |
lz4 1.7.5 | 2.101 | 720 MB/s | 3600 MB/s |
snappy 1.1.3 | 2.091 | 500 MB/s | 1650 MB/s |
lzf 3.6 -1 | 2.077 | 400 MB/s | 860 MB/s |
正文
在Windows下Build
很简单,进入\build\VS_scripts目录下根据不同环境运行相应的脚本即可!- 在项目中包含头文件#include “zstd/zstd.h”
- #pragma comment(lib,”libzstd.lib”);
- 在项目exe目录下面加入libzstd.dll文件
- 在项目lib文件夹(或者其他什么文件夹)加入libzstd.lib
四个Simple API
/*! ZSTD_compress() : * Compresses `src` content as a single zstd compressed frame into already allocated `dst`. * Hint : compression runs faster if `dstCapacity` >= `ZSTD_compressBound(srcSize)`. * @return : compressed size written into `dst` (<= `dstCapacity), * or an error code if it fails (which can be tested using ZSTD_isError()). */ ZSTDLIB_API size_t ZSTD_compress( void* dst, size_t dstCapacity, const void* src, size_t srcSize, int compressionLevel); /*! ZSTD_decompress() : * `compressedSize` : must be the _exact_ size of some number of compressed and/or skippable frames. * `dstCapacity` is an upper bound of originalSize. * If user cannot imply a maximum upper bound, it's better to use streaming mode to decompress data. * @return : the number of bytes decompressed into `dst` (<= `dstCapacity`), * or an errorCode if it fails (which can be tested using ZSTD_isError()). */ ZSTDLIB_API size_t ZSTD_decompress( void* dst, size_t dstCapacity, const void* src, size_t compressedSize); ZSTDLIB_API unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize); /*!< maximum compressed size in worst case scenario */ ZSTDLIB_API size_t ZSTD_compressBound(size_t srcSize);
压缩流程:
- 使用ZSTD_compressBound获取最大压缩缓冲区大小,然后申请缓冲区;
- 使用ZSTD_compress进行压缩
//可以设定压缩等级 1 up to ZSTD_maxCLevel() size_t dstSize = ZSTD_compress(pDest, szBufSize, pSource, szSrcSize, iCompressLevel); if (ZSTD_isError(dstSize)) { return -1; } return dstSize;
解压流程:
- 可以使用ZSTD_getDecompressedSize来获取压缩后最大缓冲区大小;来申请解压缓冲区;
size_t dstSize = ZSTD_decompress(pDest, szBufSize, pSource, szSrcSize); if (ZSTD_isError(dstSize)) { return -1; } return dstSize;
结束
相关文章推荐
- 为什么倒排索引不采用zlib这样的字典压缩算法——因为没法直接使用啊
- Python中使用gzip模块压缩文件的简单教程
- [Qt]简单使用 Zlib 库压缩/解压数据
- 在Python中使用zlib模块进行数据压缩的教程
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- 在Python中使用zlib模块进行数据压缩的教程
- Gzip Zlib PNG 压缩算法 Gzip源码详解
- Win32汇编教程三 一个简单的对话框 --- 兼谈资源文件的使用
- svn简单配置及使用教程!
- Zlib 简单的使用
- [ant]非常简单的ant使用教程
- Gzip Zlib PNG 压缩算法 Gzip源码详解 - jiurl的专栏 - CSDNBlog
- NUnit2.0使用简单教程
- 转贴: 非常简单的ant使用教程
- EXT 表单设计器(guibuilder)简单使用教程
- 二进制图像压缩算法,2005IEEE一篇文章的实现及简单改进算法
- NBear.Mapping使用教程(3):第一个简单例子
- Win32汇编教程三 一个简单的对话框 --- 兼谈资源文件的使用
- PHP面向对象的使用教程 简单数据库连接
- Struts中使用displaytag简单小教程