稳定性: 2 - 稳定

    zlib 模块提供通过 Gzip、Deflate/Inflate、和 Brotli 实现的压缩功能。

    可以通过这样使用它:

    1. const zlib = require('zlib');

    压缩和解压都是围绕 Node.js 的 [Streams API] 构建的。

    压缩或者解压流(例如一个文件)通过 zlib Transform 流将源数据流传输到目标流中来完成。

    1. const { createGzip } = require('zlib');
    2. const { pipeline } = require('stream');
    3. const {
    4. createReadStream,
    5. createWriteStream
    6. } = require('fs');
    7. const gzip = createGzip();
    8. const source = createReadStream('input.txt');
    9. const destination = createWriteStream('input.txt.gz');
    10. pipeline(source, gzip, destination, (err) => {
    11. if (err) {
    12. console.error('发生错误:', err);
    13. process.exitCode = 1;
    14. }
    15. });
    16. // 或 Promise 化:
    17. const { promisify } = require('util');
    18. const pipe = promisify(pipeline);
    19. async function do_gzip(input, output) {
    20. const gzip = createGzip();
    21. const source = createReadStream(input);
    22. const destination = createWriteStream(output);
    23. await pipe(source, gzip, destination);
    24. }
    25. do_gzip('input.txt', 'input.txt.gz')
    26. .catch((err) => {
    27. console.error('发生错误:', err);
    28. process.exitCode = 1;
    29. });

    数据的压缩或解压缩也可以只用一个步骤完成:

    1. const { deflate, unzip } = require('zlib');
    2. const input = '.................................';
    3. deflate(input, (err, buffer) => {
    4. if (err) {
    5. console.error('发生错误:', err);
    6. process.exitCode = 1;
    7. }
    8. console.log(buffer.toString('base64'));
    9. });
    10. const buffer = Buffer.from('eJzT0yMAAGTvBe8=', 'base64');
    11. unzip(buffer, (err, buffer) => {
    12. if (err) {
    13. console.error('发生错误:', err);
    14. process.exitCode = 1;
    15. }
    16. console.log(buffer.toString());
    17. });
    18. // 或 Promise 化:
    19. const { promisify } = require('util');
    20. const do_unzip = promisify(unzip);
    21. do_unzip(buffer)
    22. .then((buf) => console.log(buf.toString()))
    23. .catch((err) => {
    24. console.error('发生错误:', err);
    25. process.exitCode = 1;
    26. });