zstd是FB(现在的Meta)名下的一套压缩算法及其工具。常常和之提起的是谷歌的Brotli。

zstd的特定是解压速度快,针对小文件可以采用基于字典的压缩方式。

命令行

Windows可以通过scoop install zstd安装zstd的命令行。

zstd --train files可以根据输入文件files来训练一个字典。 字典的大小默认限制在110K。训练的时候,只读取每个输入文件的131072字节。

Linux下zstd还是带了不少命令行工具的。

文档

文档在https://raw.githack.com/facebook/zstd/release/doc/zstd_manual.html,版本为1.5.2。

1.5.1版本的文档在https://facebook.github.io/zstd/zstd_manual.html可读。

  • Introduction
    • 压缩级别1到22,20级以上为--ultra
    • 压缩可以
      • 单步完成
      • 单步完成,但需要辅之以上下文
      • 可拆分成若干步
    • 对于小数据的压缩可以通过字典显著提供。
      • 基于字典的压缩不能拆分成若干布
    • 高级的试水功能,可以通过#define ZSTD_STATIC_LINKING_ONLY打开,必须在包含zstd.h之前定义
  • Version
  • Simple API
  • Explicit context
  • Decompression context
  • Advanced compression API (Requires v1.4.0+)
  • Advanced decompression API (Requires v1.4.0+)
  • Streaming
  • Streaming compression - HowTo
  • Streaming decompression - HowTo
  • Simple dictionary API
  • Bulk processing dictionary API
  • Dictionary helper functions
  • Advanced dictionary and prefix API (Requires v1.4.0+)
  • experimental API (static linking only)
  • (剩余略)

语言实现

默认zstd是用C/C++实现的。zstd页面列出了许多语言上的绑定或者移植。

C#实现

C#有几种实现,其中https://github.com/oleg-st/ZstdSharp是基于Zstd1.5.2的移植版。

ZstdSharp提供跟原始C/C++接口一致的Unsafe的C#接口。提供了两个名字空间ZstdSharp和ZstdSharp.unsafe。

ZstdSharp提供了三个组件:

  • Zstd.Extern
  • ZstdSharp
  • ZstdSharp.Core

(底线)