Node.js v4.2.4 手册 & 文档
目录
- Zlib
- 例子
- zlib.createGzip([options])
- zlib.createGunzip([options])
- zlib.createDeflate([options])
- zlib.createInflate([options])
- zlib.createDeflateRaw([options])
- zlib.createInflateRaw([options])
- zlib.createUnzip([options])
- 类: zlib.Zlib
- 类: zlib.Gzip
- 类: zlib.Gunzip
- 类: zlib.Deflate
- 类: zlib.Inflate
- 类: zlib.DeflateRaw
- 类: zlib.InflateRaw
- 类: zlib.Unzip
- 快捷方法
- zlib.deflate(buf, [options], callback)
- zlib.deflateRaw(buf, [options], callback)
- zlib.Gzip(buf, [options], callback)
- zlib.gunzip(buf, [options], callback)
- zlib.inflate(buf, [options], callback)
- zlib.inflateRaw(buf, [options], callback)
- zlib.unzip(buf, [options], callback)
- 选项
- 内存使用调优
- 常量
Zlib#
稳定度: 3 - 稳定
你可以这样引入此模块:
var zlib = require('zlib');
这个模块提供了对Gzip/Gunzip, Deflate/Inflate和DeflateRaw/InflateRaw类的绑定。每一个类都可以接收相同的选项,并且本身也是一个可读写的Stream类。
例子#
压缩或解压缩一个文件可以通过导流一个 fs.ReadStream 到一个 zlib 流,然后到一个 fs.WriteStream 来完成。
inp.pipe(gzip).pipe(out);
一步压缩或解压缩数据可以通过快捷方法来完成。
var buffer = new Buffer('eJzT0yMAAGTvBe8=', 'base64');
zlib.unzip(buffer, function(err, buffer) {
if (!err) {
console.log(buffer.toString());
}
});
要在 HTTP 客户端或服务器中使用此模块,请在请求和响应中使用 accept-encoding 和 content-encoding 头。
注意:这些例子只是极其简单地展示了基础的概念 Zlib 编码消耗非常大,结果需要缓存.看下面的内存调优 中更多的关于Zlib用法中 速度/内存/压缩 的权衡取舍。
// 注意: 这不是一个不合格的 accept-encoding 解析器
// 详见 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3
if (acceptEncoding.match(/\bdeflate\b/)) {
response.writeHead(200, { 'content-encoding': 'deflate' });
raw.pipe(zlib.createDeflate()).pipe(response);
} else if (acceptEncoding.match(/\bgzip\b/)) {
response.writeHead(200, { 'content-encoding': 'gzip' });
raw.pipe(zlib.createGzip()).pipe(response);
} else {
response.writeHead(200, {});
raw.pipe(response);
}
}).listen(1337);
zlib.createGzip([options])#
zlib.createGunzip([options])#
zlib.createDeflate([options])#
zlib.createInflate([options])#
zlib.createDeflateRaw([options])#
以 options 所给选项返回一个新的 DeflateRaw 对象。
zlib.createInflateRaw([options])#
以 options 所给选项返回一个新的 InflateRaw 对象。
zlib.createUnzip([options])#
类: zlib.Zlib#
这个类未被 zlib
模块导出,编入此文档是因为它是其它压缩器/解压缩器的基类。
zlib.flush([kind], callback)#
kind
缺省为 zlib.Z_FULL_FLUSH
。
写入缓冲数据。请勿轻易调用此方法,过早的写入会对压缩算法的作用产生影响。
zlib.params(level, strategy, callback)#
动态更新压缩级别和压缩策略。仅对 deflate 算法有效。
zlib.reset()#
将压缩器/解压缩器重置为缺省值。仅对 inflate 和 deflate 算法有效。
类: zlib.Gzip#
使用 gzip 压缩数据。
类: zlib.Gunzip#
解压缩一个 gzip 流。
类: zlib.Deflate#
使用 deflate 压缩数据。
类: zlib.Inflate#
解压缩一个 deflate 流。
类: zlib.DeflateRaw#
使用 deflate 压缩数据,并且不附带 zlib 头。
类: zlib.InflateRaw#
解压缩一个原始 deflate 流。
类: zlib.Unzip#
自动识别头部来解压缩一个以 gzip 或 deflate 压缩的流。
快捷方法#
所有这些方法的第一个参数都可以是字符串或 Buffer;可选地可以将传给 zlib 类的选项作为第二个参数传入;回调格式为 callback(error, result)
。
zlib.deflate(buf, [options], callback)#
使用 Deflate 压缩一个字符串。
zlib.deflateRaw(buf, [options], callback)#
使用 DeflateRaw 压缩一个字符串。
zlib.Gzip(buf, [options], callback)#
使用 Gzip 压缩一个字符串。
zlib.gunzip(buf, [options], callback)#
使用 Gunzip 解压缩一个原始的 Buffer。
zlib.inflate(buf, [options], callback)#
使用 Inflate 解压缩一个原始的 Buffer。
zlib.inflateRaw(buf, [options], callback)#
使用 InflateRaw 解压缩一个原始的 Buffer。
zlib.unzip(buf, [options], callback)#
使用 Unzip 解压缩一个原始的 Buffer。
选项#
各个类都有一个选项对象。所有选项都是可选的。
请注意有些选项仅对压缩有效,并会被解压缩类所忽略。
- flush(缺省:
zlib.Z_NO_FLUSH
) - chunkSize(缺省:16*1024)
- windowBits
- level(仅用于压缩)
- memLevel(仅用于压缩)
- strategy(仅用于压缩)
- dictionary(仅用于 deflate/inflate,缺省为空目录)
详情请参阅 http://zlib.net/manual.html#Advanced 的 deflateInit2
和 inflateInit2
。
内存使用调优#
来自 zlib/zconf.h
,修改为 node 的用法:
deflate 的内存需求(按字节):
(1 << (windowBits+2)) + (1 << (memLevel+9))
表示:windowBits = 15 的 128K + memLevel = 8 的 128K(缺省值)加上其它对象的若干 KB。
举个例子,如果您需要将缺省内存需求从 256K 减少到 128K,设置选项:
{ windowBits: 14, memLevel: 7 }
当然这通常会降低压缩等级(天底下没有免费午餐)。
inflate 的内存需求(按字节):
1 << windowBits
表示 windowBits = 15(缺省值)的 32K 加上其它对象的若干 KB。
这是除了内部输出缓冲外 chunkSize
的大小,缺省为 16K。
zlib 压缩的速度主要受压缩级别 level
的影响。更高的压缩级别会有更好的压缩率,但也要花费更长时间。更低的压缩级别会有较低压缩率,但速度更快。
通常,使用更多内存的选项意味着 node 能减少对 zlib 的调用,因为单次 write
操作能处理更多数据。因此,这是另一个影响速度和内存占用的因素。
常量#
所有在 zlib.h 中定义的常量同样也定义在 require('zlib')
中。
在通常情况下您几乎不会用到它们,编入文档只是为了让您不会对它们的存在感到惊讶。该章节几乎完全来自 zlib 的文档。详见 http://zlib.net/manual.html#Constants。
允许的 flush 取值。
zlib.Z_NO_FLUSH
zlib.Z_PARTIAL_FLUSH
zlib.Z_SYNC_FLUSH
zlib.Z_FULL_FLUSH
zlib.Z_FINISH
zlib.Z_BLOCK
zlib.Z_TREES
压缩/解压缩函数的返回值。负数代表错误,正数代表特殊但正常的事件。
zlib.Z_OK
zlib.Z_STREAM_END
zlib.Z_NEED_DICT
zlib.Z_ERRNO
zlib.Z_STREAM_ERROR
zlib.Z_DATA_ERROR
zlib.Z_MEM_ERROR
zlib.Z_BUF_ERROR
zlib.Z_VERSION_ERROR
压缩级别。
zlib.Z_NO_COMPRESSION
zlib.Z_BEST_SPEED
zlib.Z_BEST_COMPRESSION
zlib.Z_DEFAULT_COMPRESSION
压缩策略。
zlib.Z_FILTERED
zlib.Z_HUFFMAN_ONLY
zlib.Z_RLE
zlib.Z_FIXED
zlib.Z_DEFAULT_STRATEGY
data_type 字段的可能值。
zlib.Z_BINARY
zlib.Z_TEXT
zlib.Z_ASCII
zlib.Z_UNKNOWN
deflate 压缩方法(该版本仅支持一种)。
zlib.Z_DEFLATED
初始化 zalloc/zfree/opaque。
zlib.Z_NULL