外观
system.zlib
约 386 字大约 1 分钟
2026-07-15
只提供一个同步解压方法;没有压缩、流式解压或异步接口。
zlib.decompressSync(data)
同步解压 typed buffer,返回 Uint8Array;输入不是 typed buffer 或解压失败时返回 null。
实现会依次尝试:
- zlib 包装流(
MAX_WBITS); - raw DEFLATE(
-MAX_WBITS); - gzip(
MAX_WBITS + 16)。
import zlib from '@system.zlib'
const output = zlib.decompressSync(compressedUint8Array)
if (output === null) {
console.error('decompress failed')
} else {
console.log('decompressed bytes:', output.byteLength)
}输入推荐使用 Uint8Array。如果拿到的是 ArrayBuffer,可显式创建视图:
function decompressArrayBuffer(buffer) {
return zlib.decompressSync(new Uint8Array(buffer))
}解压 UTF-8 文本时仍需单独解码;此接口不会返回字符串:
const bytes = zlib.decompressSync(payload)
if (bytes) {
const text = new TextDecoder('utf-8').decode(bytes)
console.log(text)
}这是同步接口,大数据会阻塞快应用 JS/uvloop。实现以 16 KiB 为增长块,没有对最终解压尺寸施加显式上限,调用方应自行限制不可信输入。尤其要防止小输入解压成超大数据的 zip bomb 类负载。
建议同时限制压缩数据大小和业务允许的预期输出大小;由于 API 只有在完成后才返回,无法在中途终止解压。对不可信网络数据,优先在手机端或后端解压。
返回值判定
| 返回值 | 含义 |
|---|---|
Uint8Array | 解压成功;零长度是否有效取决于输入流 |
null | 参数不是 typed buffer,或三种模式均解压失败 |
机型可用性
| Xiaomi Smart Band 10 Pro | Xiaomi Watch S4 41mm |
|---|---|
| ✅ | ✅ |