扩展库/snappy

snappy

压缩归档
v1.0.0C 混编0 依赖ABI 1

Snappy 高速压缩 — Google 开发,以速度为首要目标(目标 250 MB/s+),格式兼容 Google Snappy,适合大数据管道与实时处理。本库为干净室纯 C 实现(Snappy 格式兼容 1.0.0),xlang 层提供二进制安全(统一 Buffer)、易用的 API:一次性内存压缩、文件级压缩、以及 update → drain → finish 增量流式处理。

典型场景

大数据管道实时流压缩缓存压缩RPC 载荷日志压缩进度回显传输

快速开始

quick_start.xl
import snappy

func main(...) as int
    Buffer packed = snappy.compress("hello snappy")
    println(snappy.decompressText(packed))   // hello snappy

    auto enc = snappy.compressor()
    enc.update("part1 ")
    enc.update("part2")
    enc.finish()
    Buffer blob = enc.drain()

    auto dec = snappy.decompressor()
    dec.update(blob)
    dec.finish()
    println(dec.drain().text())           // part1 part2
    return 0
end

核心特性

包信息

包名snappy
版本1.0.0
引擎纯 C Snappy 格式兼容实现 1.0.0
实现方式C 混编(Snappy 引擎 C,API 层 xlang)
依赖无
ABI 版本1
导出符号compress(), decompress(), decompressText(), compressFile(), decompressFile(), compressor(), decompressor(), SnappyCompressor, SnappyDecompressor
源文件extlibs/snappy/src/snappy.xl
一次性 / 文件 / 流式
export func compress(Buffer data, ...) as Buffer export func decompress(Buffer data, ...) as Buffer export func compressFile(...) / decompressFile(...) export func compressor(...) as SnappyCompressor export func decompressor(...) as SnappyDecompressor

API 结构与 zstd 一致:一次性、文件级、增量流式三粒度。流式类提供 update/drain/finish + inputBytes/outputBytes/finished/members。

文件接口末尾支持可空 onProgress(inputBytes, totalBytes, outputBytes)。返回 false 删除临时输出并抛 CancelledError;回调异常原样传播。C 层对应 xrtprogressproc + void* userData。
Snappy 为固定策略算法,无级别/质量参数,因此也不导出调优常量;数据损坏抛 CompressionError。

教学范例

完整源文件:examples/extlibs/snappy.xl

1. 一次性 + 流式

snappy.xl
import snappy

Buffer packed = snappy.compress("xlang snappy")
assert snappy.decompressText(packed) == "xlang snappy"
println("引擎版本: ", snappy.version())

auto encoder = snappy.compressor()
Buffer streamPacked = Buffer()
encoder.update("hello ")
streamPacked.append(encoder.drain())
encoder.update("stream")
streamPacked.append(encoder.drain())
encoder.finish()
streamPacked.append(encoder.drain())

auto decoder = snappy.decompressor()
decoder.update(streamPacked)
decoder.finish()
assert decoder.drain().text() == "hello stream"

2. 高冗余数据压缩率

压缩率
Buffer redundant = Buffer()
int i = 0
while i < 256
    redundant.append("snappy-snappy-")
    i = i + 1
end
Buffer packed = snappy.compress(redundant)
println(redundant.size(), " -> ", packed.size(), " 字节")   // 3584 -> 202
assert snappy.decompress(packed) == redundant

运行范例

终端
cd release
xl.exe run examples\extlibs\snappy.xl

测试覆盖

测试文件:test/cases/extlib_snappy.xl、test/cases/extlib_snappy_progress.xl

运行测试

终端
cd release
xl.exe run ..\test\cases\extlib_snappy.xl
← 返回扩展库列表