Node.js 的 zlib
模块提供了对数据进行压缩和解压缩的功能。该模块支持多种压缩格式,包括 Gzip、Deflate、Brotli 等,常用于处理 HTTP 请求和响应的压缩,或者在存储和传输过程中节省带宽和存储空间。
Node.js 的 zlib
模块提供了对数据进行压缩和解压缩的功能。该模块支持多种压缩格式,包括 Gzip、Deflate、Brotli 等,常用于处理 HTTP 请求和响应的压缩,或者在存储和传输过程中节省带宽和存储空间。
以下是 zlib
模块的详细介绍,包括其所有属性、方法以及使用示例。
引入模块
const zlib = require('zlib');
或者使用 ES 模块语法:
import * as zlib from 'zlib';
可用的压缩方法
zlib.gzip
: Gzip 压缩。zlib.gunzip
: Gzip 解压缩。zlib.deflate
: Deflate 压缩。zlib.inflate
: Deflate 解压缩。zlib.brotliCompress
: Brotli 压缩。zlib.brotliDecompress
: Brotli 解压缩.
zlib
模块提供的类和方法
1. zlib.gzip
zlib.gzip(buffer[, options], callback)
buffer
{Buffer | string} 要压缩的数据。options
{Object} 可选配置:level
{number} 压缩级别,范围从 0 到 9。默认为zlib.constants.Z_DEFAULT_COMPRESSION
。memLevel
{number} 内存使用级别,范围从 1 到 9。默认为8
。windowBits
{number} 窗口大小,范围从 8 到 15。默认为15
。
callback
{Function} 回调函数,接受两个参数:err
和result
。err
是错误信息,result
是压缩后的数据。
示例:
const zlib = require('zlib');
zlib.gzip('Hello World', (err, buffer) => {
if (err) {
console.error('Error during gzip:', err);
return;
}
console.log('Gzipped data:', buffer);
});
2. zlib.gunzip
zlib.gunzip(buffer[, options], callback)
buffer
{Buffer | string} 要解压缩的数据。options
{Object} 可选配置,与zlib.gzip
的选项类似。callback
{Function} 回调函数,接受两个参数:err
和result
。err
是错误信息,result
是解压缩后的数据。
示例:
const zlib = require('zlib');
zlib.gunzip(gzippedBuffer, (err, buffer) => {
if (err) {
console.error('Error during gunzip:', err);
return;
}
console.log('Gunzip result:', buffer.toString());
});
3. zlib.deflate
zlib.deflate(buffer[, options], callback)
buffer
{Buffer | string} 要压缩的数据。options
{Object} 可选配置,与zlib.gzip
的选项类似。callback
{Function} 回调函数,接受两个参数:err
和result
。err
是错误信息,result
是压缩后的数据。
示例:
const zlib = require('zlib');
zlib.deflate('Hello World', (err, buffer) => {
if (err) {
console.error('Error during deflate:', err);
return;
}
console.log('Deflated data:', buffer);
});
4. zlib.inflate
zlib.inflate(buffer[, options], callback)
buffer
{Buffer | string} 要解压缩的数据。options
{Object} 可选配置,与zlib.deflate
的选项类似。callback
{Function} 回调函数,接受两个参数:err
和result
。err
是错误信息,result
是解压缩后的数据。
示例:
const zlib = require('zlib');
zlib.inflate(deflatedBuffer, (err, buffer) => {
if (err) {
console.error('Error during inflate:', err);
return;
}
console.log('Inflated result:', buffer.toString());
});
5. zlib.brotliCompress
zlib.brotliCompress(buffer[, options], callback)
buffer
{Buffer | string} 要压缩的数据。options
{Object} 可选配置:params
{Object} Brotli 压缩参数,如quality
,lgwin
等。
callback
{Function} 回调函数,接受两个参数:err
和result
。err
是错误信息,result
是压缩后的数据。
示例:
const zlib = require('zlib');
zlib.brotliCompress('Hello World', (err, buffer) => {
if (err) {
console.error('Error during brotliCompress:', err);
return;
}
console.log('Brotli compressed data:', buffer);
});
6. zlib.brotliDecompress
zlib.brotliDecompress(buffer[, options], callback)
buffer
{Buffer | string} 要解压缩的数据。options
{Object} 可选配置,与zlib.brotliCompress
的选项类似。callback
{Function} 回调函数,接受两个参数:err
和result
。err
是错误信息,result
是解压缩后的数据。
示例:
const zlib = require('zlib');
zlib.brotliDecompress(brotliCompressedBuffer, (err, buffer) => {
if (err) {
console.error('Error during brotliDecompress:', err);
return;
}
console.log('Brotli decompressed result:', buffer.toString());
});
流式压缩和解压缩
zlib
模块还支持流式操作,可以用于处理较大的数据流。以下是一些常用的流式方法。
1. zlib.createGzip
zlib.createGzip([options])
options
{Object} 可选配置,支持与zlib.gzip
相同的选项。
示例:
const fs = require('fs');
const zlib = require('zlib');
// 创建一个 gzip 压缩流
const gzip = zlib.createGzip();
// 创建一个读流
const input = fs.createReadStream('input.txt');
// 创建一个写流
const output = fs.createWriteStream('input.txt.gz');
// 将数据流通过 gzip 压缩流
input.pipe(gzip).pipe(output);
2. zlib.createGunzip
zlib.createGunzip([options])
options
{Object} 可选配置,支持与zlib.gunzip
相同的选项。
示例:
const fs = require('fs');
const zlib = require('zlib');
// 创建一个 gunzip 解压缩流
const gunzip = zlib.createGunzip();
// 创建一个读流
const input = fs.createReadStream('input.txt.gz');
// 创建一个写流
const output = fs.createWriteStream('input.txt');
// 将数据流通过 gunzip 解压缩流
input.pipe(gunzip).pipe(output);
3. zlib.createDeflate
zlib.createDeflate([options])
options
{Object} 可选配置,支持与zlib.deflate
相同的选项。
示例:
const fs = require('fs');
const zlib = require('zlib');
// 创建一个 deflate 压缩流
const deflate = zlib.createDeflate();
// 创建一个读流
const input = fs.createReadStream('input.txt');
// 创建一个写流
const output = fs.createWriteStream('input.txt.deflate');
// 将数据流通过 deflate 压缩流
input.pipe(deflate).pipe(output);
4. zlib.createInflate
zlib.createInflate([options])
options
{Object} 可选配置,支持与zlib.inflate
相同的选项。
示例:
const fs = require('fs');
const zlib = require('zlib');
// 创建一个 inflate 解压缩流
const inflate = zlib.createInflate();
// 创建一个读流
const input = fs.createReadStream('input.txt.deflate');
// 创建一个写流
const output = fs.createWriteStream('input.txt');
// 将数据流通过 inflate 解压缩流
input.pipe(inflate).pipe(output);
5. zlib.createBrotliCompress
**zlib.createBrotliCompress([options])
**
options
{Object} 可选配置,支持与zlib.brotliCompress
相同的选项。
示例:
const fs = require('fs');
const zlib = require('zlib');
// 创建一个 Brotli 压缩流
const brotliCompress = zlib.createBrotliCompress();
// 创建一个读流
const input = fs.createReadStream('input.txt');
// 创建一个写流
const output = fs.createWriteStream('input.txt.br');
// 将数据流通过 Brotli 压缩流
input.pipe(brotliCompress).pipe(output);
6. zlib.createBrotliDecompress
zlib.createBrotliDecompress([options])
options
{Object} 可选配置,支持与zlib.brotliDecompress
相同的选项.
示例:
const fs = require('fs');
const zlib = require('zlib');
// 创建一个 Brotli 解压缩流
const brotliDecompress = zlib.createBrotliDecompress();
// 创建一个读流
const input = fs.createReadStream('input.txt.br');
// 创建一个写流
const output = fs.createWriteStream('input.txt');
// 将数据流通过 Brotli 解压缩流
input.pipe(brotliDecompress).pipe(output);
常量
-
zlib.constants
: 包含一些常用的常量。Z_BEST_COMPRESSION
{number} 最大压缩级别。Z_BEST_SPEED
{number} 最快压缩速度。Z_DEFAULT_COMPRESSION
{number} 默认压缩级别。Z_DEFAULT_STRATEGY
{number} 默认策略。Z_NO_FLUSH
{number} 不立即刷新。
总结
Node.js 的 zlib
模块为数据压缩和解压缩提供了全面的支持,包括对 Gzip、Deflate 和 Brotli 格式的操作。它支持同步和异步 API,可以在需要高效处理数据流时使用。通过流式操作,可以方便地处理大规模的数据,从而提高应用程序的性能。