Pure MoonBit XZ/LZMA/LZMA2 compression and decompression toolkit
Dependencies
| 功能 | 状态 |
|---|---|
| XZ stream header / footer / index 解析 | 支持 |
| 单 block 和多 block XZ stream | 支持 |
| 拼接 XZ stream 和 stream padding | 支持 |
| LZMA2 压缩块解码 | 支持 |
| LZMA2 未压缩块解码 | 支持 |
| LZMA2 range encoder 和压缩编码 | 支持 |
| Hash chain match finder | 支持 |
| 压缩级别 0-9 和字典大小参数 | 支持 |
| LZMA2 未压缩块编码和自动回退 | 支持 |
| .lzma LZMA1 旧格式解码 | 支持 |
| .lzma LZMA1 旧格式编码 | 支持 |
| CRC32 / CRC64 / SHA-256 block check | 支持 |
| 输出大小限制和错误分类 | 支持 |
| Delta filter | 支持 |
| x86 BCJ filter | 支持 |
| IA64 / ARM-Thumb / PowerPC BCJ filter | 未实现,返回 Unsupported |
| 流式 Reader / Writer | 支持 |
| 文件 CLI | 支持 |
moon add lin2077-zeming/moonxzimport {
"lin2077-zeming/moonxz/lib" @moonxz,
}fn example() -> Unit raise {
let input = b"MoonXZ quick start\n"
let encoded = @moonxz.compress(input)
let decoded = @moonxz.decompress(encoded)
println(decoded == input)
}let encoded = @moonxz.compress_with_check(input, @moonxz.CheckKind::Sha256)let options = @moonxz.CompressionOptions::new(
level=9,
dict_size=8 * 1024 * 1024,
filter=@moonxz.FilterMode::X86,
)
let encoded = @moonxz.compress_with_options(input, options)let writer = @moonxz.XzWriter::new()
let first = writer.write(b"first block")
let second = writer.write(b"second block")
let tail = writer.finish()
let reader = @moonxz.XzReader::new(first + second + tail)
let block = reader.read_block()let decoded = @moonxz.decompress_with_limit(encoded, 16 * 1024 * 1024)// 解压由 xz --format=lzma 或 Python lzma.compress(data, format=lzma.FORMAT_ALONE) 生成的文件
let decoded = @moonxz.decompress_lzma1(legacy)
// 写出 .lzma
let encoded = @moonxz.compress_lzma1(input)
// 读取头部信息,便于诊断
let (lc, lp, pb) = @moonxz.lzma1_properties(legacy)
let declared = @moonxz.lzma1_declared_size(legacy)| filter id | 名称 | 状态 | 验证方式 |
|---|---|---|---|
| 0x03 | delta | 支持 | liblzma 双向 |
| 0x04 | x86 | 支持 | liblzma 双向 |
| 0x05 | PowerPC | 未实现,返回 Unsupported | — |
| 0x06 | IA64 | 未实现,返回 Unsupported | — |
| 0x07 | ARM | 未实现,返回 Unsupported | — |
| 0x08 | ARM-Thumb | 未实现,返回 Unsupported | — |
| 0x09 | SPARC | 未实现,返回 Unsupported | — |
| 0x0A | ARM64 | 未实现,返回 Unsupported | — |
| 0x21 | LZMA2 | 支持 | liblzma 双向 |
moon run cmd/main -- demo
moon run cmd/main -- compress <hex> [none|crc32|crc64|sha256]
moon run cmd/main -- decompress <hex>
moon run cmd/main -- roundtrip <hex>
moon run cmd/main -- lzma-decompress <hex>
moon run cmd/main -- lzma-roundtrip <hex>
moon run cmd/main -- compress-file <input> <output> [check] [none|x86|delta]
moon run cmd/main -- decompress-file <input> <output>
moon run cmd/main -- lzma-compress-file <input> <output>
moon run cmd/main -- lzma-decompress-file <input> <output>moon check --deny-warn
moon test --deny-warn
moon fmt --check
moon test --target all --deny-warnmoon.mod 模块元数据
lib/moon.pkg 库包配置
lib/moonxz.mbt 公共 API
lib/xz.mbt XZ 容器解析和写入
lib/lzma1.mbt .lzma 旧格式头部、解码和编码
lib/lzma2.mbt LZMA2 chunk 解析
lib/lzma_decoder.mbt LZMA 概率模型和状态机
lib/range_decoder.mbt LZMA range decoder
lib/range_encoder.mbt LZMA range encoder
lib/lzma_encoder.mbt LZMA 编码状态机
lib/lzma2_encoder.mbt LZMA2 压缩块编码和回退
lib/match_finder.mbt Hash chain match finder
lib/filters.mbt Delta 与 x86 BCJ filter
lib/streaming.mbt 流式 Reader / Writer
lib/check.mbt CRC32 / CRC64 / SHA-256
lib/util.mbt 字节游标、VLI 和序列化辅助
cmd/main/ 可运行 CLI
docs/DESIGN.md 实现设计说明$xz = (moon run -q cmd/main -- compress 6869 sha256).Trim()
python -c "import lzma,sys; print(lzma.decompress(bytes.fromhex(sys.argv[1])))" $xzb'hi'Install
Download zipPure MoonBit XZ/LZMA/LZMA2 compression and decompression toolkit
Dependencies