fastlz-port-js
v1.0.1
Published
FastLZ lightning-fast lossless compression library — JavaScript port (C-compatible)
Maintainers
Readme
fastlz-port-js
FastLZ lightning-fast lossless compression library — JavaScript port.
这是 FastLZ C 库(v1.0.1,RT-Thread 变体)的 纯 JavaScript 移植,使用 Uint8Array 进行字节级 I/O,Uint32Array 作为哈希表。压缩格式与 C 版 FastLZ 完全兼容。
安装
npm install fastlz-port-js与 npm 包 fastlz.js 的区别
| | fastlz-port-js(本包) | fastlz.js(旧包) |
|---|----------------------|----------------------|
| 实现 | 忠实翻译 C 源码,函数式 API | 另一套 JS 实现 |
| API | fastlzCompress / fastlzDecompress 等 | FastLZDecoder 全局类 |
| 运行时 | 无全局污染,适合 ESM / 严格模式 / uni-app | 依赖 self / global 挂载,严格模式下易白屏 |
| TypeScript | 内置类型声明(fastlz.d.ts) | 无 |
| C 互操作 | 与 RT-Thread FastLZ 二进制格式兼容 | 行为与 C 版不一致 |
若你从 fastlz.js 迁移,请改用本包的 API(见下方示例),不要继续 require('fastlz.js')。
用法
ES Module
import { fastlzCompress, fastlzDecompress, outputBufferSize } from 'fastlz-port-js';
const input = new Uint8Array([/* ... */]);
const outBuf = new Uint8Array(input.length + outputBufferSize(input.length));
const { size: compressedSize } = fastlzCompress(input, input.length, outBuf);
const compressed = outBuf.slice(0, compressedSize);
const decompressed = new Uint8Array(65536);
const { size: decompressedSize } = fastlzDecompress(compressed, compressed.length, decompressed);
const result = decompressed.slice(0, decompressedSize);CommonJS
const { fastlzCompress, fastlzDecompress } = require('fastlz-port-js');指定压缩级别
import { fastlzCompressLevel } from 'fastlz-port-js';
const { size: size1 } = fastlzCompressLevel(1, input, input.length, output);
const { size: size2 } = fastlzCompressLevel(2, input, input.length, output);TypeScript
本包内置类型声明(fastlz.d.ts),无需安装 @types/*,用法与 ES Module 相同:
import { fastlzCompress, fastlzDecompress, type FastLZResult } from 'fastlz-port-js';
const input = new Uint8Array([1, 2, 3]);
const { size }: FastLZResult = fastlzCompress(input);API
fastlzCompress(input, [length], [output])
自动选择压缩级别(< 65536 字节用 level 1,否则用 level 2)。返回 { data: Uint8Array, size: number }。
fastlzCompressLevel(level, input, [length], [output])
指定压缩级别(1 或 2)。
fastlzDecompress(input, [length], [output], [maxout])
自动检测压缩级别并解压。返回 { data: Uint8Array, size: number },size=0 表示错误。
outputBufferSize(inputLength)
计算所需的最小输出缓冲区大小:66 + inputLength * 5 / 100。
与 C 版本的对应关系
| C 函数 | JS 函数 |
|--------|---------|
| fastlz_compress() | fastlzCompress() |
| fastlz_compress_level() | fastlzCompressLevel() |
| fastlz_decompress() | fastlzDecompress() |
| FASTLZ_BUFFER_PADDING(x) | outputBufferSize(x) |
兼容性
压缩数据格式与 C 版 FastLZ 完全兼容。JS 压缩的数据可以被 C 版解压,反之亦然。
许可证
MIT License — 与原 FastLZ 库相同。详见 LICENSE。
发布到 npm(维护者)
本机默认 registry 若为镜像站,请显式登录并发布到官方源:
npm login --registry https://registry.npmjs.org/
npm run publish:public参考
- FastLZ 官网: http://fastlz.org/
- 原始 C 源码: https://github.com/RT-Thread-packages/fastlz
