當前位置:
首頁 > 知識 > Facebook開源Zstandard新型壓縮演算法代替Zlib 簡單使用

Facebook開源Zstandard新型壓縮演算法代替Zlib 簡單使用


簡介

Zstandard(縮寫為Zstd)是由Facebook的Yann Collet開發的一個無損數據壓縮演算法。Zstandard在設計上與DEFLATE(.zip、gzip)演算法有著差不多的壓縮比,但有更高的壓縮和解壓縮速度。 Zstandard使用字典演算法(LZ77)結合熵編碼法的有限狀態熵(tANS)。-----Wikipedia


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

很簡單,進入uildVS_scripts目錄下根據不同環境運行相應的腳本即可!

  • 在項目中包含頭文件#include "zstd/zstd.h"
  • //#pragma comment(lib,"libzstd.lib");
  • 在項目exe目錄下面加入libzstd.dll文件
  • 在項目lib文件夾(或者其他什麼文件夾)加入libzstd.lib

Facebook開源Zstandard新型壓縮演算法代替Zlib 簡單使用

四個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;

結束

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

大數據操作:刪除和去重
Redis可視化工具Redis Desktop Manager使用
文件描述符與FILE
cookie的路徑問題
使用 keepalived 的ip漂移搭建主從web

TAG:科技優家 |

您可能感興趣

Google全新自主研發Fuchsia系統是否代替Android?
Bose推出新品家用智能音箱 Google Assistant代替Alexa
DaVinci Resolve 16是你代替Adobe Pro的新選擇
數學家:「Scriptless Scripts」可代替智能合約
被視為代替Kafka的消息隊列:Apache Pulsar設計簡介
Chrome Beta 66採用Chrome Duplex代替Home
Mark Hamill表示:應該讓Carrie Fisher代替川普的星星
為 Air Max 喪命,穿 Tom Ford 代替嗑藥
Zume收購Pivot Packaging,用可降解材料代替食品配送中的塑料包裝
葡萄牙Aptoide正與華為洽談合作事宜,欲代替Google Play
NEWS | 這秀我不走了!Vivienne Westwood用視頻代替走秀?
#分享# 首發配色的代替品?它SAY NO! Adidas Yeezy 500 「Salt」 | Xsneaker
新iPhone命名亮了:將用Max代替Plus!
北美老將hazed代替LeX加入Mythic
Amazon重大調整,產品Review將被紅人計劃代替
未來新iPhone大變動:砍掉3D Touch 用新技術代替
蘋果iPad Pro能代替MacBook嗎?上手實測告訴你答案!
Air或成歷史 蘋果或用13寸MacBook代替
用一套價值 1700 元的裝備能不能代替AirPods和Apple Watch?
oppo有又新動作!兩款新機已經入網,可能要代替oppo Find X