模組zlib
zlib 是內建的壓縮模組,支援gzip、deflate、zlib 等多種壓縮格式和模式
zlib 主要由以下3 個函數組成:
- deflate:壓縮資料;
- inflate:解壓縮資料;
- gzip:gzip 壓縮格式。
在使用zlib 前,需要先根據需要使用的壓縮演算法選擇其中一種。可以參考zlib 的常數來選擇對應的壓縮演算法。例如,我們使用deflate 壓縮演算法進行模組說明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15const zlib = require('zlib');
const {
NO_COMPRESSION,
BEST_SPEED,
BEST_COMPRESSION,
DEFAULT_COMPRESSION
} = require('zlib');
// compress data
const deflated = zlib.deflate('hello, world', BEST_SPEED);
console.log(deflated.toString());
// decompress data
const inflated = zlib.inflate(deflated);
console.log(inflated.toString());
上面的程式碼展示如何壓縮和解壓數據,先用zlib.deflate
方法壓縮hello, world
這個字串,並傳入BEST_SPEED
作為壓縮級別選項,然後用zlib.inflate
方法解壓縮該數據,輸出的結果應該與原始字串相同。
zlib.deflate
和zlib.inflate
都支援定義壓縮級別,壓縮級別是一個數字,取值範圍為[NO_COMPRESSION, BEST_SPEED, DEFAULT_COMPRESSION, BEST_COMPRESSION]
,預設值為DEFAULT_COMPRESSION
。關於這4 種壓縮等級的意義,可以參考下面的table:
Compression Level | Meaning |
---|---|
zlib.NO_COMPRESSION | 不壓縮資料(含有壓縮頭完成的支援) |
zlib.BEST_SPEED | 最快的壓縮速度;但是壓縮比也相應的差一些 |
zlib.DEFAULT_COMPRESSION | 根據壓縮演算法的預設值,通常情況下比BEST_SPEED 的壓縮速度慢但壓縮率更高 |
zlib.BEST_COMPRESSION | 最高壓縮比,但壓縮速度也相應較慢。 |
在使用zlib
模組時需要注意的是,如果要同時壓縮和解壓數據,建議先使用deflate
對數據進行壓縮之後再使用inflate
對數據進行解壓縮,避免出現錯誤。而對於不同的壓縮格式和演算法,還有其他的類別和方法進行壓縮和解壓縮,可以參考以下文件進行使用。
靜態函數
createDeflate
建立一個deflate 流對象
1static Stream zlib.createDeflate(Stream to);
呼叫參數:
- to:Stream, 用於儲存處理結果的流
回傳結果:
- Stream, 傳回封裝過的流對象
createDeflateRaw
建立一個deflateRaw 流對象
1static Stream zlib.createDeflateRaw(Stream to);
呼叫參數:
- to:Stream, 用於儲存處理結果的流
回傳結果:
- Stream, 傳回封裝過的流對象
createGunzip
建立一個gunzip 流對象
1
2static Stream zlib.createGunzip(Stream to,
Integer maxSize = -1);
呼叫參數:
- to:Stream, 用於儲存處理結果的流
- maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制
回傳結果:
- Stream, 傳回封裝過的流對象
createGzip
建立一個gzip 流對象
1static Stream zlib.createGzip(Stream to);
呼叫參數:
- to:Stream, 用於儲存處理結果的流
回傳結果:
- Stream, 傳回封裝過的流對象
createInflate
建立一個inflate 流對象
1
2static Stream zlib.createInflate(Stream to,
Integer maxSize = -1);
呼叫參數:
- to:Stream, 用於儲存處理結果的流
- maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制
回傳結果:
- Stream, 傳回封裝過的流對象
createInflateRaw
建立一個inflateRaw 流對象
1
2static Stream zlib.createInflateRaw(Stream to,
Integer maxSize = -1);
呼叫參數:
- to:Stream, 用於儲存處理結果的流
- maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制
回傳結果:
- Stream, 傳回封裝過的流對象
deflate
使用deflate 演算法壓縮資料(zlib格式)
1
2static Buffer zlib.deflate(Buffer data,
Integer level = DEFAULT_COMPRESSION) async;
呼叫參數:
- data:Buffer, 給定要壓縮的數據
- level: Integer, 指定壓縮級別,缺省為DEFAULT_COMPRESSION
回傳結果:
- Buffer, 返回壓縮後的二進位數據
deflateTo
使用deflate 演算法壓縮資料到流物件中(zlib格式)
1
2
3static zlib.deflateTo(Buffer data,
Stream stm,
Integer level = DEFAULT_COMPRESSION) async;
呼叫參數:
使用deflate 演算法壓縮來源流中的資料到流物件中(zlib格式)
1
2
3static zlib.deflateTo(Stream src,
Stream stm,
Integer level = DEFAULT_COMPRESSION) async;
呼叫參數:
inflate
解壓縮deflate 演算法壓縮的資料(zlib格式)
1
2static Buffer zlib.inflate(Buffer data,
Integer maxSize = -1) async;
呼叫參數:
- data:Buffer, 給定壓縮後的數據
- maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制
回傳結果:
- Buffer, 返回解壓縮後的二進位數據
inflateTo
解壓縮deflate 演算法壓縮的資料到流物件中(zlib格式)
1
2
3static zlib.inflateTo(Buffer data,
Stream stm,
Integer maxSize = -1) async;
呼叫參數:
解壓縮來源流中deflate 演算法壓縮的資料到流物件中(zlib格式)
1
2
3static zlib.inflateTo(Stream src,
Stream stm,
Integer maxSize = -1) async;
呼叫參數:
gzip
使用gzip 演算法壓縮數據
1static Buffer zlib.gzip(Buffer data) async;
呼叫參數:
- data:Buffer, 給定要壓縮的數據
回傳結果:
- Buffer, 返回壓縮後的二進位數據
gzipTo
使用gzip 演算法壓縮資料到流物件中
1
2static zlib.gzipTo(Buffer data,
Stream stm) async;
呼叫參數:
使用gzip 演算法壓縮來源流中的資料到流物件中
1
2static zlib.gzipTo(Stream src,
Stream stm) async;
呼叫參數:
gunzip
解壓縮gzip 演算法壓縮的數據
1
2static Buffer zlib.gunzip(Buffer data,
Integer maxSize = -1) async;
呼叫參數:
- data:Buffer, 給定壓縮後的數據
- maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制
回傳結果:
- Buffer, 返回解壓縮後的二進位數據
gunzipTo
解壓縮gzip 演算法壓縮的資料到流物件中
1
2
3static zlib.gunzipTo(Buffer data,
Stream stm,
Integer maxSize = -1) async;
呼叫參數:
解壓縮源流中gzip 演算法壓縮的資料到流物件中
1
2
3static zlib.gunzipTo(Stream src,
Stream stm,
Integer maxSize = -1) async;
呼叫參數:
deflateRaw
使用deflate 演算法壓縮資料(deflateRaw)
1
2static Buffer zlib.deflateRaw(Buffer data,
Integer level = DEFAULT_COMPRESSION) async;
呼叫參數:
- data:Buffer, 給定要壓縮的數據
- level: Integer, 指定壓縮級別,缺省為DEFAULT_COMPRESSION
回傳結果:
- Buffer, 返回壓縮後的二進位數據
deflateRawTo
使用deflate 演算法壓縮資料到流物件中(deflateRaw)
1
2
3static zlib.deflateRawTo(Buffer data,
Stream stm,
Integer level = DEFAULT_COMPRESSION) async;
呼叫參數:
使用deflate 演算法壓縮來源流中的資料到流物件中(deflateRaw)
1
2
3static zlib.deflateRawTo(Stream src,
Stream stm,
Integer level = DEFAULT_COMPRESSION) async;
呼叫參數:
inflateRaw
解壓縮deflate 演算法壓縮的資料(inflateRaw)
1
2static Buffer zlib.inflateRaw(Buffer data,
Integer maxSize = -1) async;
呼叫參數:
- data:Buffer, 給定壓縮後的數據
- maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制
回傳結果:
- Buffer, 返回解壓縮後的二進位數據
inflateRawTo
解壓縮deflate 演算法壓縮的資料到流物件中(inflateRaw)
1
2
3static zlib.inflateRawTo(Buffer data,
Stream stm,
Integer maxSize = -1) async;
呼叫參數:
解壓縮來源流中deflate 演算法壓縮的資料到流物件中(inflateRaw)
1
2
3static zlib.inflateRawTo(Stream src,
Stream stm,
Integer maxSize = -1) async;
呼叫參數:
常量
NO_COMPRESSION
deflate 壓縮級別,設定不壓縮
1const zlib.NO_COMPRESSION = 0;
BEST_SPEED
deflate 壓縮級別,設定最快壓縮
1const zlib.BEST_SPEED = 1;
BEST_COMPRESSION
deflate 壓縮級別,設定最高壓縮
1const zlib.BEST_COMPRESSION = 9;
DEFAULT_COMPRESSION
deflate 壓縮級別,設定預設設定
1const zlib.DEFAULT_COMPRESSION = -1;