如何使用 Node.js zlib 模块和选项?

2024-03-25

我需要使用 zlib 以极端压缩级别压缩 Node.js 中的缓冲区。输出的标头应为 78 DA。除非我遗漏了什么,否则 Node.js 文档并没有真正描述如何使用 zlib.Deflate 类。它不接受任何参数。

http://nodejs.org/api/zlib.html#zlib_class_zlib_deflate http://nodejs.org/api/zlib.html#zlib_class_zlib_deflate


Use zlib. createGzip/createDeflate获取所需压缩器的实例,并在对象中包含选项。

如果你想在内存中完成这一切:

var zlib = require('zlib');

// create a new gzip object
var gzip = zlib.createGzip({
    level: 9 // maximum compression
}), buffers=[], nread=0;

// attach event handlers...

gzip.on('error', function(err) {
    gzip.removeAllListeners();
    gzip=null;
});

gzip.on('data', function(chunk) {
    buffers.push(chunk);
    nread += chunk.length;
});


gzip.on('end', function() {
    var buffer;
    switch (buffers.length) {
        case 0: // no data.  return empty buffer
            buffer = new Buffer(0);
            break;
        case 1: // only one chunk of data.  return it.
            buffer = buffers[0];
            break;
        default: // concatenate the chunks of data into a single buffer.
            buffer = new Buffer(nread);
            var n = 0;
            buffers.forEach(function(b) {
                var l = b.length;
                b.copy(buffer, n, 0, l);
                n += l;
            });
            break;
    }

    gzip.removeAllListeners();
    gzip=null;

    // do something with `buffer` here!
});

// and finally, give it data to compress
gzip.write(inputBuffer);
gzip.end();

当然,如果您正在处理大量数据,请将输出流式传输到文件,而不是在内存中缓冲所有内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Node.js zlib 模块和选项? 的相关文章