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
/*! 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