Module 基礎模組

模組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 15
const 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.deflatezlib.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 流對象

1
static Stream zlib.createDeflate(Stream to);

呼叫參數:

  • to:Stream, 用於儲存處理結果的流

回傳結果:

  • Stream, 傳回封裝過的流對象

createDeflateRaw

建立一個deflateRaw 流對象

1
static Stream zlib.createDeflateRaw(Stream to);

呼叫參數:

  • to:Stream, 用於儲存處理結果的流

回傳結果:

  • Stream, 傳回封裝過的流對象

createGunzip

建立一個gunzip 流對象

1 2
static Stream zlib.createGunzip(Stream to, Integer maxSize = -1);

呼叫參數:

  • to:Stream, 用於儲存處理結果的流
  • maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制

回傳結果:

  • Stream, 傳回封裝過的流對象

createGzip

建立一個gzip 流對象

1
static Stream zlib.createGzip(Stream to);

呼叫參數:

  • to:Stream, 用於儲存處理結果的流

回傳結果:

  • Stream, 傳回封裝過的流對象

createInflate

建立一個inflate 流對象

1 2
static Stream zlib.createInflate(Stream to, Integer maxSize = -1);

呼叫參數:

  • to:Stream, 用於儲存處理結果的流
  • maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制

回傳結果:

  • Stream, 傳回封裝過的流對象

createInflateRaw

建立一個inflateRaw 流對象

1 2
static Stream zlib.createInflateRaw(Stream to, Integer maxSize = -1);

呼叫參數:

  • to:Stream, 用於儲存處理結果的流
  • maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制

回傳結果:

  • Stream, 傳回封裝過的流對象

deflate

使用deflate 演算法壓縮資料(zlib格式)

1 2
static Buffer zlib.deflate(Buffer data, Integer level = DEFAULT_COMPRESSION) async;

呼叫參數:

  • data:Buffer, 給定要壓縮的數據
  • level: Integer, 指定壓縮級別,缺省為DEFAULT_COMPRESSION

回傳結果:

  • Buffer, 返回壓縮後的二進位數據

deflateTo

使用deflate 演算法壓縮資料到流物件中(zlib格式)

1 2 3
static zlib.deflateTo(Buffer data, Stream stm, Integer level = DEFAULT_COMPRESSION) async;

呼叫參數:

  • data:Buffer, 給定要壓縮的數據
  • stm:Stream, 指定儲存壓縮資料的流
  • level: Integer, 指定壓縮級別,缺省為DEFAULT_COMPRESSION

使用deflate 演算法壓縮來源流中的資料到流物件中(zlib格式)

1 2 3
static zlib.deflateTo(Stream src, Stream stm, Integer level = DEFAULT_COMPRESSION) async;

呼叫參數:

  • src:Stream, 給定要壓縮的資料所在的流
  • stm:Stream, 指定儲存壓縮資料的流
  • level: Integer, 指定壓縮級別,缺省為DEFAULT_COMPRESSION

inflate

解壓縮deflate 演算法壓縮的資料(zlib格式)

1 2
static Buffer zlib.inflate(Buffer data, Integer maxSize = -1) async;

呼叫參數:

  • data:Buffer, 給定壓縮後的數據
  • maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制

回傳結果:

  • Buffer, 返回解壓縮後的二進位數據

inflateTo

解壓縮deflate 演算法壓縮的資料到流物件中(zlib格式)

1 2 3
static zlib.inflateTo(Buffer data, Stream stm, Integer maxSize = -1) async;

呼叫參數:

  • data:Buffer, 給定要解壓縮的數據
  • stm:Stream, 指定儲存解壓縮資料的流
  • maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制

解壓縮來源流中deflate 演算法壓縮的資料到流物件中(zlib格式)

1 2 3
static zlib.inflateTo(Stream src, Stream stm, Integer maxSize = -1) async;

呼叫參數:

  • src:Stream, 給定要解壓縮的資料所在的流
  • stm:Stream, 指定儲存解壓縮資料的流
  • maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制

gzip

使用gzip 演算法壓縮數據

1
static Buffer zlib.gzip(Buffer data) async;

呼叫參數:

  • data:Buffer, 給定要壓縮的數據

回傳結果:

  • Buffer, 返回壓縮後的二進位數據

gzipTo

使用gzip 演算法壓縮資料到流物件中

1 2
static zlib.gzipTo(Buffer data, Stream stm) async;

呼叫參數:

  • data:Buffer, 給定要壓縮的數據
  • stm:Stream, 指定儲存壓縮資料的流

使用gzip 演算法壓縮來源流中的資料到流物件中

1 2
static zlib.gzipTo(Stream src, Stream stm) async;

呼叫參數:

  • src:Stream, 給定要壓縮的資料所在的流
  • stm:Stream, 指定儲存壓縮資料的流

gunzip

解壓縮gzip 演算法壓縮的數據

1 2
static Buffer zlib.gunzip(Buffer data, Integer maxSize = -1) async;

呼叫參數:

  • data:Buffer, 給定壓縮後的數據
  • maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制

回傳結果:

  • Buffer, 返回解壓縮後的二進位數據

gunzipTo

解壓縮gzip 演算法壓縮的資料到流物件中

1 2 3
static zlib.gunzipTo(Buffer data, Stream stm, Integer maxSize = -1) async;

呼叫參數:

  • data:Buffer, 給定要解壓縮的數據
  • stm:Stream, 指定儲存解壓縮資料的流
  • maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制

解壓縮源流中gzip 演算法壓縮的資料到流物件中

1 2 3
static zlib.gunzipTo(Stream src, Stream stm, Integer maxSize = -1) async;

呼叫參數:

  • src:Stream, 給定要解壓縮的資料所在的流
  • stm:Stream, 指定儲存解壓縮資料的流
  • maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制

deflateRaw

使用deflate 演算法壓縮資料(deflateRaw)

1 2
static Buffer zlib.deflateRaw(Buffer data, Integer level = DEFAULT_COMPRESSION) async;

呼叫參數:

  • data:Buffer, 給定要壓縮的數據
  • level: Integer, 指定壓縮級別,缺省為DEFAULT_COMPRESSION

回傳結果:

  • Buffer, 返回壓縮後的二進位數據

deflateRawTo

使用deflate 演算法壓縮資料到流物件中(deflateRaw)

1 2 3
static zlib.deflateRawTo(Buffer data, Stream stm, Integer level = DEFAULT_COMPRESSION) async;

呼叫參數:

  • data:Buffer, 給定要壓縮的數據
  • stm:Stream, 指定儲存壓縮資料的流
  • level: Integer, 指定壓縮級別,缺省為DEFAULT_COMPRESSION

使用deflate 演算法壓縮來源流中的資料到流物件中(deflateRaw)

1 2 3
static zlib.deflateRawTo(Stream src, Stream stm, Integer level = DEFAULT_COMPRESSION) async;

呼叫參數:

  • src:Stream, 給定要壓縮的資料所在的流
  • stm:Stream, 指定儲存壓縮資料的流
  • level: Integer, 指定壓縮級別,缺省為DEFAULT_COMPRESSION

inflateRaw

解壓縮deflate 演算法壓縮的資料(inflateRaw)

1 2
static Buffer zlib.inflateRaw(Buffer data, Integer maxSize = -1) async;

呼叫參數:

  • data:Buffer, 給定壓縮後的數據
  • maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制

回傳結果:

  • Buffer, 返回解壓縮後的二進位數據

inflateRawTo

解壓縮deflate 演算法壓縮的資料到流物件中(inflateRaw)

1 2 3
static zlib.inflateRawTo(Buffer data, Stream stm, Integer maxSize = -1) async;

呼叫參數:

  • data:Buffer, 給定要解壓縮的數據
  • stm:Stream, 指定儲存解壓縮資料的流
  • maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制

解壓縮來源流中deflate 演算法壓縮的資料到流物件中(inflateRaw)

1 2 3
static zlib.inflateRawTo(Stream src, Stream stm, Integer maxSize = -1) async;

呼叫參數:

  • src:Stream, 給定要解壓縮的資料所在的流
  • stm:Stream, 指定儲存解壓縮資料的流
  • maxSize: Integer, 指定解壓縮尺寸限制,預設為-1,不限制

常量

NO_COMPRESSION

deflate 壓縮級別,設定不壓縮

1
const zlib.NO_COMPRESSION = 0;

BEST_SPEED

deflate 壓縮級別,設定最快壓縮

1
const zlib.BEST_SPEED = 1;

BEST_COMPRESSION

deflate 壓縮級別,設定最高壓縮

1
const zlib.BEST_COMPRESSION = 9;

DEFAULT_COMPRESSION

deflate 壓縮級別,設定預設設定

1
const zlib.DEFAULT_COMPRESSION = -1;