扩展库/miniz

miniz

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

miniz 轻量级 deflate 压缩 — 单文件 C 实现,兼容 zlib 格式,适合嵌入式与轻量集成场景。C 层内嵌 miniz 11.3.1,xlang 层提供二进制安全(统一 Buffer)、易用的 API:一次性内存压缩、文件级压缩、以及 update → drain → finish 增量流式处理。

典型场景

嵌入式压缩zlib 兼容轻量集成日志压缩缓存压缩进度回显传输

快速开始

quick_start.xl
import miniz

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

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

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

核心特性

包信息

包名miniz
版本1.0.0
引擎miniz 11.3.1(单文件 deflate 实现)
实现方式C 混编(miniz 引擎 C,API 层 xlang)
依赖无
ABI 版本1
导出符号compress(), decompress(), decompressText(), compressFile(), decompressFile(), compressor(), decompressor(), MinizCompressor, MinizDecompressor, MINIZ_* 常量
源文件extlibs/miniz/src/miniz.xl
常量
export const int MINIZ_MIN_LEVEL = 1 export const int MINIZ_MAX_LEVEL = 10 export const int MINIZ_DEFAULT_LEVEL = 6

压缩级别常量。1 最快、10 压缩率最高、6 为默认平衡点。

一次性 / 文件 / 流式
export func compress(Buffer data, int level = 6, ...) as Buffer export func decompress(Buffer data, ...) as Buffer export func compressFile(...) / decompressFile(...) export func compressor(int level = 6, ...) as MinizCompressor export func decompressor(...) as MinizDecompressor

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

文件接口末尾支持可空 onProgress(inputBytes, totalBytes, outputBytes)。返回 false 删除临时输出并抛 CancelledError;回调异常原样传播。C 层对应 xrtprogressproc + void* userData。
level 越界抛 ValueError;数据损坏抛 CompressionError。

教学范例

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

1. 一次性 + 流式

miniz.xl
import miniz

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

auto encoder = miniz.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 = miniz.decompressor()
decoder.update(streamPacked)
decoder.finish()
assert decoder.drain().text() == "hello stream"

2. 最高级别 L10

调优
auto tuned = miniz.compressor(miniz.MINIZ_MAX_LEVEL)
tuned.update("tune me")
tuned.finish()
assert miniz.decompress(tuned.drain()).text() == "tune me"

运行范例

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

测试覆盖

测试文件:test/cases/extlib_miniz.xl、test/cases/extlib_miniz_progress.xl

运行测试

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