Zlib
稳定性: 2 - 稳定的
\Stability: 2 - Stable
源代码: lib/zlib.js
node:zlib 模块提供使用 Gzip、Deflate/Inflate、Brotli 和 Zstd 实现的压缩功能。
\The node:zlib module provides compression functionality implemented using
Gzip, Deflate/Inflate, Brotli, and Zstd.
要访问它:
\To access it:
import zlib from 'node:zlib';const zlib = require('node:zlib');
压缩和解压缩是围绕 Node.js 流 API 构建的。
\Compression and decompression are built around the Node.js Streams API.
压缩或解压缩流(例如文件)可以通过将源流通过 zlib Transform 流管道传输到目标流来完成:
\Compressing or decompressing a stream (such as a file) can be accomplished by
piping the source stream through a zlib Transform stream into a destination
stream:
import { createReadStream, createWriteStream, } from 'node:fs'; import process from 'node:process'; import { createGzip } from 'node:zlib'; import { pipeline } from 'node:stream'; const gzip = createGzip(); const source = createReadStream('input.txt'); const destination = createWriteStream('input.txt.gz'); pipeline(source, gzip, destination, (err) => { if (err) { console.error('An error occurred:', err); process.exitCode = 1; } });const { createReadStream, createWriteStream, } = require('node:fs'); const process = require('node:process'); const { createGzip } = require('node:zlib'); const { pipeline } = require('node:stream'); const gzip = createGzip(); const source = createReadStream('input.txt'); const destination = createWriteStream('input.txt.gz'); pipeline(source, gzip, destination, (err) => { if (err) { console.error('An error occurred:', err); process.exitCode = 1; } });
或者,使用 promise pipeline API:
\Or, using the promise pipeline API:
import { createReadStream, createWriteStream, } from 'node:fs'; import { createGzip } from 'node:zlib'; import { pipeline } from 'node:stream/promises'; async function do_gzip(input, output) { const gzip = createGzip(); const source = createReadStream(input); const destination = createWriteStream(output); await pipeline(source, gzip, destination); } await do_gzip('input.txt', 'input.txt.gz');const { createReadStream, createWriteStream, } = require('node:fs'); const process = require('node:process'); const { createGzip } = require('node:zlib'); const { pipeline } = require('node:stream/promises'); async function do_gzip(input, output) { const gzip = createGzip(); const source = createReadStream(input); const destination = createWriteStream(output); await pipeline(source, gzip, destination); } do_gzip('input.txt', 'input.txt.gz') .catch((err) => { console.error('An error occurred:', err); process.exitCode = 1; });
也可以一步压缩或解压缩数据:
\It is also possible to compress or decompress data in a single step:
import process from 'node:process'; import { Buffer } from 'node:buffer'; import { deflate, unzip } from 'node:zlib'; const input = '.................................'; deflate(input, (err, buffer) => { if (err) { console.error('An error occurred:', err); process.exitCode = 1; } console.log(buffer.toString('base64')); }); const buffer = Buffer.from('eJzT0yMAAGTvBe8=', 'base64'); unzip(buffer, (err, buffer) => { if (err) { console.error('An error occurred:', err); process.exitCode = 1; } console.log(buffer.toString()); }); // Or, Promisified import { promisify } from 'node:util'; const do_unzip = promisify(unzip); const unzippedBuffer = await do_unzip(buffer); console.log(unzippedBuffer.toString());const { deflate, unzip } = require('node:zlib'); const input = '.................................'; deflate(input, (err, buffer) => { if (err) { console.error('An error occurred:', err); process.exitCode = 1; } console.log(buffer.toString('base64')); }); const buffer = Buffer.from('eJzT0yMAAGTvBe8=', 'base64'); unzip(buffer, (err, buffer) => { if (err) { console.error('An error occurred:', err); process.exitCode = 1; } console.log(buffer.toString()); }); // Or, Promisified const { promisify } = require('node:util'); const do_unzip = promisify(unzip); do_unzip(buffer) .then((buf) => console.log(buf.toString())) .catch((err) => { console.error('An error occurred:', err); process.exitCode = 1; });