Zlib
[Stable: 2 - Stable]
Stable: 2 Stability: 2 - Stable
ソースコード: lib/zlib.js
node:zlib
モジュールは、Gzip、Deflate/Inflate、Brotli を使用して実装された圧縮機能を提供します。
アクセスするには:
import os from 'node:zlib'
const zlib = require('node:zlib')
圧縮と解凍は、Node.js の Streams API をベースに構築されています。
ファイルなどのストリームを圧縮または解凍するには、ソースストリームを zlib
の Transform
ストリームを介して宛先ストリームにパイプ処理することができます。
import { createReadStream, createWriteStream } from 'node:fs'
import process from 'node:process'
import { createGzip } from 'node:zlib'
import { pipeline } from 'node:stream'
const gzip = createGzip()
const source = createReadStream('input.txt')
const destination = createWriteStream('input.txt.gz')
pipeline(source, gzip, destination, err => {
if (err) {
console.error('An error occurred:', err)
process.exitCode = 1
}
})
const { createReadStream, createWriteStream } = require('node:fs')
const process = require('node:process')
const { createGzip } = require('node:zlib')
const { pipeline } = require('node:stream')
const gzip = createGzip()
const source = createReadStream('input.txt')
const destination = createWriteStream('input.txt.gz')
pipeline(source, gzip, destination, err => {
if (err) {
console.error('An error occurred:', err)
process.exitCode = 1
}
})
または、Promise pipeline
API を使用します。
import { createReadStream, createWriteStream } from 'node:fs'
import process from 'node:process'
import { createGzip } from 'node:zlib'
import { pipeline } from 'node:stream/promises'
async function do_gzip(input, output) {
const gzip = createGzip()
const source = createReadStream(input)
const destination = createWriteStream(output)
await pipeline(source, gzip, destination)
}
await do_gzip('input.txt', 'input.txt.gz')
const { createReadStream, createWriteStream } = require('node:fs')
const process = require('node:process')
const { createGzip } = require('node:zlib')
const { pipeline } = require('node:stream/promises')
async function do_gzip(input, output) {
const gzip = createGzip()
const source = createReadStream(input)
const destination = createWriteStream(output)
await pipeline(source, gzip, destination)
}
do_gzip('input.txt', 'input.txt.gz').catch(err => {
console.error('An error occurred:', err)
process.exitCode = 1
})
1 ステップでデータの圧縮または解凍を行うことも可能です。
import process from 'node:process'
import { Buffer } from 'node:buffer'
import { deflate, unzip } from 'node:zlib'
const input = '.................................'
deflate(input, (err, buffer) => {
if (err) {
console.error('An error occurred:', err)
process.exitCode = 1
}
console.log(buffer.toString('base64'))
})
const buffer = Buffer.from('eJzT0yMAAGTvBe8=', 'base64')
unzip(buffer, (err, buffer) => {
if (err) {
console.error('An error occurred:', err)
process.exitCode = 1
}
console.log(buffer.toString())
})
// Or, Promisified
import { promisify } from 'node:util'
const do_unzip = promisify(unzip)
const unzippedBuffer = await do_unzip(buffer)
console.log(unzippedBuffer.toString())
const { deflate, unzip } = require('node:zlib')
const input = '.................................'
deflate(input, (err, buffer) => {
if (err) {
console.error('An error occurred:', err)
process.exitCode = 1
}
console.log(buffer.toString('base64'))
})
const buffer = Buffer.from('eJzT0yMAAGTvBe8=', 'base64')
unzip(buffer, (err, buffer) => {
if (err) {
console.error('An error occurred:', err)
process.exitCode = 1
}
console.log(buffer.toString())
})
// Or, Promisified
const { promisify } = require('node:util')
const do_unzip = promisify(unzip)
do_unzip(buffer)
.then(buf => console.log(buf.toString()))
.catch(err => {
console.error('An error occurred:', err)
process.exitCode = 1
})
Threadpool の使用方法とパフォーマンスに関する考慮事項
zlib
API のすべて(明示的に同期的なものを除く)は、Node.js の内部スレッドプールを使用します。これは、一部のアプリケーションで予期しない影響とパフォーマンスの制限につながる可能性があります。
大量の zlib オブジェクトを同時に作成して使用すると、メモリ断片化が大幅に発生する可能性があります。
import zlib from 'node:zlib'
import { Buffer } from 'node:buffer'
const payload = Buffer.from('This is some data')
// WARNING: DO NOT DO THIS!
for (let i = 0; i < 30000; ++i) {
zlib.deflate(payload, (err, buffer) => {})
}
const zlib = require('node:zlib')
const payload = Buffer.from('This is some data')
// WARNING: DO NOT DO THIS!
for (let i = 0; i < 30000; ++i) {
zlib.deflate(payload, (err, buffer) => {})
}
上記の例では、30,000 個の deflate インスタンスが同時に作成されます。一部のオペレーティングシステムのメモリ割り当てと解放方法のため、これによりメモリ断片化が大幅に発生する可能性があります。
圧縮操作の結果をキャッシュして、作業の重複を避けることを強くお勧めします。
HTTP リクエストとレスポンスの圧縮
node:zlib
モジュールを使用して、HTTPで定義されているgzip
、deflate
、br
コンテンツエンコーディングメカニズムのサポートを実装できます。
HTTP のAccept-Encoding
ヘッダーは、クライアントが受け入れる圧縮エンコーディングを HTTP リクエスト内で識別するために使用されます。Content-Encoding
ヘッダーは、メッセージに実際に適用された圧縮エンコーディングを識別するために使用されます。
以下に示す例は、基本的な概念を示すために大幅に簡略化されています。zlib
エンコーディングの使用はコストがかかる可能性があり、結果はキャッシュする必要があります。zlib
の使用に伴う速度/メモリ/圧縮のトレードオフの詳細については、メモリ使用量の調整を参照してください。
// クライアントリクエストの例
import fs from 'node:fs'
import zlib from 'node:zlib'
import http from 'node:http'
import process from 'node:process'
import { pipeline } from 'node:stream'
const request = http.get({
host: 'example.com',
path: '/',
port: 80,
headers: { 'Accept-Encoding': 'br,gzip,deflate' },
})
request.on('response', response => {
const output = fs.createWriteStream('example.com_index.html')
const onError = err => {
if (err) {
console.error('An error occurred:', err)
process.exitCode = 1
}
}
switch (response.headers['content-encoding']) {
case 'br':
pipeline(response, zlib.createBrotliDecompress(), output, onError)
break
// Or, just use zlib.createUnzip() to handle both of the following cases:
case 'gzip':
pipeline(response, zlib.createGunzip(), output, onError)
break
case 'deflate':
pipeline(response, zlib.createInflate(), output, onError)
break
default:
pipeline(response, output, onError)
break
}
})
// クライアントリクエストの例
const zlib = require('node:zlib')
const http = require('node:http')
const fs = require('node:fs')
const { pipeline } = require('node:stream')
const request = http.get({
host: 'example.com',
path: '/',
port: 80,
headers: { 'Accept-Encoding': 'br,gzip,deflate' },
})
request.on('response', response => {
const output = fs.createWriteStream('example.com_index.html')
const onError = err => {
if (err) {
console.error('An error occurred:', err)
process.exitCode = 1
}
}
switch (response.headers['content-encoding']) {
case 'br':
pipeline(response, zlib.createBrotliDecompress(), output, onError)
break
// Or, just use zlib.createUnzip() to handle both of the following cases:
case 'gzip':
pipeline(response, zlib.createGunzip(), output, onError)
break
case 'deflate':
pipeline(response, zlib.createInflate(), output, onError)
break
default:
pipeline(response, output, onError)
break
}
})
// サーバーの例
// すべてのリクエストでgzip操作を実行するのは非常にコストがかかります。
// 圧縮されたバッファーをキャッシュする方がはるかに効率的です。
import zlib from 'node:zlib'
import http from 'node:http'
import fs from 'node:fs'
import { pipeline } from 'node:stream'
http
.createServer((request, response) => {
const raw = fs.createReadStream('index.html')
// 圧縮版と非圧縮版の両方のリソースを保存します。
response.setHeader('Vary', 'Accept-Encoding')
const acceptEncoding = request.headers['accept-encoding'] || ''
const onError = err => {
if (err) {
// エラーが発生した場合、サーバーはすでに200の応答コードを送信しており、
// ある程度のデータがすでにクライアントに送信されているため、できることはほとんどありません。
// 最善の策は、応答をすぐに終了し、エラーをログに記録することです。
response.end()
console.error('An error occurred:', err)
}
}
// 注:これは準拠したaccept-encodingパーサーではありません。
// https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3を参照してください。
if (/\bdeflate\b/.test(acceptEncoding)) {
response.writeHead(200, { 'Content-Encoding': 'deflate' })
pipeline(raw, zlib.createDeflate(), response, onError)
} else if (/\bgzip\b/.test(acceptEncoding)) {
response.writeHead(200, { 'Content-Encoding': 'gzip' })
pipeline(raw, zlib.createGzip(), response, onError)
} else if (/\bbr\b/.test(acceptEncoding)) {
response.writeHead(200, { 'Content-Encoding': 'br' })
pipeline(raw, zlib.createBrotliCompress(), response, onError)
} else {
response.writeHead(200, {})
pipeline(raw, response, onError)
}
})
.listen(1337)
// サーバーの例
// すべてのリクエストでgzip操作を実行するのは非常にコストがかかります。
// 圧縮されたバッファーをキャッシュする方がはるかに効率的です。
const zlib = require('node:zlib')
const http = require('node:http')
const fs = require('node:fs')
const { pipeline } = require('node:stream')
http
.createServer((request, response) => {
const raw = fs.createReadStream('index.html')
// 圧縮版と非圧縮版の両方のリソースを保存します。
response.setHeader('Vary', 'Accept-Encoding')
const acceptEncoding = request.headers['accept-encoding'] || ''
const onError = err => {
if (err) {
// エラーが発生した場合、サーバーはすでに200の応答コードを送信しており、
// ある程度のデータがすでにクライアントに送信されているため、できることはほとんどありません。
// 最善の策は、応答をすぐに終了し、エラーをログに記録することです。
response.end()
console.error('An error occurred:', err)
}
}
// 注:これは準拠したaccept-encodingパーサーではありません。
// https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3を参照してください。
if (/\bdeflate\b/.test(acceptEncoding)) {
response.writeHead(200, { 'Content-Encoding': 'deflate' })
pipeline(raw, zlib.createDeflate(), response, onError)
} else if (/\bgzip\b/.test(acceptEncoding)) {
response.writeHead(200, { 'Content-Encoding': 'gzip' })
pipeline(raw, zlib.createGzip(), response, onError)
} else if (/\bbr\b/.test(acceptEncoding)) {
response.writeHead(200, { 'Content-Encoding': 'br' })
pipeline(raw, zlib.createBrotliCompress(), response, onError)
} else {
response.writeHead(200, {})
pipeline(raw, response, onError)
}
})
.listen(1337)
デフォルトでは、zlib
メソッドは切り詰められたデータを解凍するときにエラーをスローします。ただし、データが不完全であることがわかっている場合、または圧縮ファイルの先頭部分のみを検査したい場合は、解凍に使用されるフラッシュメソッドを変更することにより、デフォルトのエラー処理を抑制できます。
// これは上記の例のバッファーの切り詰められたバージョンです
const buffer = Buffer.from('eJzT0yMA', 'base64')
zlib.unzip(
buffer,
// Brotliの場合、同等のものはzlib.constants.BROTLI_OPERATION_FLUSHです。
{ finishFlush: zlib.constants.Z_SYNC_FLUSH },
(err, buffer) => {
if (err) {
console.error('An error occurred:', err)
process.exitCode = 1
}
console.log(buffer.toString())
}
)
これは、入力データの形式が無効であるなど、他のエラーをスローする状況では動作を変更しません。このメソッドを使用すると、入力が途中で終了したのか、整合性チェックが不足しているのかを判断できなくなるため、解凍された結果が有効であることを手動で確認する必要があります。
メモリ使用量の調整
zlib ベースのストリームの場合
zlib/zconf.h
から、Node.js で使用するために修正したもの:
deflate に必要なメモリ量は(バイト単位で)以下の通りです。
;(1 << (windowBits + 2)) + (1 << (memLevel + 9))
つまり、windowBits
= 15 の場合 128KB + memLevel
= 8(デフォルト値)の場合 128KB + 小さなオブジェクトのための数キロバイトです。
例えば、デフォルトのメモリ要件を 256KB から 128KB に削減するには、オプションを次のように設定する必要があります。
const options = { windowBits: 14, memLevel: 7 }
ただし、これにより、一般的に圧縮率が低下します。
inflate に必要なメモリ量は(バイト単位で)1 << windowBits
です。つまり、windowBits
= 15(デフォルト値)の場合 32KB + 小さなオブジェクトのための数キロバイトです。
これは、chunkSize
サイズの単一の内部出力スラブバッファに加えてのことです。デフォルトは 16KB です。
zlib
圧縮の速度は、level
設定によって最も劇的に影響を受けます。レベルが高いほど圧縮率は向上しますが、完了するまで時間がかかります。レベルが低いほど圧縮率は低下しますが、はるかに高速になります。
一般的に、メモリ使用量が多いオプションは、各write
操作でより多くのデータ処理できるため、Node.js がzlib
への呼び出しを減らすことができます。そのため、これはメモリ使用量を犠牲にして速度に影響を与えるもう 1 つの要因です。
Brotli ベースのストリームの場合
zlib オプションと同様のものが Brotli ベースのストリームにもありますが、これらのオプションの範囲は zlib のものとは異なります。
- zlib の
level
オプションは Brotli のBROTLI_PARAM_QUALITY
オプションに対応します。 - zlib の
windowBits
オプションは Brotli のBROTLI_PARAM_LGWIN
オプションに対応します。
Brotli 固有のオプションの詳細については、以下を参照してください。
フラッシュ
圧縮ストリームで.flush()
を呼び出すと、zlib
は現在可能な限り多くの出力を返します。これは圧縮品質の低下を招く可能性がありますが、データをできるだけ早く利用する必要がある場合に役立ちます。
次の例では、flush()
を使用して圧縮された部分的な HTTP 応答をクライアントに書き込んでいます。
import zlib from 'node:zlib'
import http from 'node:http'
import { pipeline } from 'node:stream'
http
.createServer((request, response) => {
// For the sake of simplicity, the Accept-Encoding checks are omitted.
response.writeHead(200, { 'content-encoding': 'gzip' })
const output = zlib.createGzip()
let i
pipeline(output, response, err => {
if (err) {
// If an error occurs, there's not much we can do because
// the server has already sent the 200 response code and
// some amount of data has already been sent to the client.
// The best we can do is terminate the response immediately
// and log the error.
clearInterval(i)
response.end()
console.error('An error occurred:', err)
}
})
i = setInterval(() => {
output.write(`The current time is ${Date()}\n`, () => {
// The data has been passed to zlib, but the compression algorithm may
// have decided to buffer the data for more efficient compression.
// Calling .flush() will make the data available as soon as the client
// is ready to receive it.
output.flush()
})
}, 1000)
})
.listen(1337)
const zlib = require('node:zlib')
const http = require('node:http')
const { pipeline } = require('node:stream')
http
.createServer((request, response) => {
// For the sake of simplicity, the Accept-Encoding checks are omitted.
response.writeHead(200, { 'content-encoding': 'gzip' })
const output = zlib.createGzip()
let i
pipeline(output, response, err => {
if (err) {
// If an error occurs, there's not much we can do because
// the server has already sent the 200 response code and
// some amount of data has already been sent to the client.
// The best we can do is terminate the response immediately
// and log the error.
clearInterval(i)
response.end()
console.error('An error occurred:', err)
}
})
i = setInterval(() => {
output.write(`The current time is ${Date()}\n`, () => {
// The data has been passed to zlib, but the compression algorithm may
// have decided to buffer the data for more efficient compression.
// Calling .flush() will make the data available as soon as the client
// is ready to receive it.
output.flush()
})
}, 1000)
})
.listen(1337)
定数
追加日時: v0.5.8
zlib 定数
zlib.h
で定義されているすべての定数は、require('node:zlib').constants
にも定義されています。通常はこれらの定数を使用する必要はありません。存在が驚くべきものでないように、ここに記載されています。このセクションは、zlib ドキュメントからほぼそのまま引用したものです。
以前は、require('node:zlib')
から直接定数にアクセスできました(例:zlib.Z_NO_FLUSH
)。モジュールから直接定数にアクセスすることは現在も可能ですが、非推奨です。
許容されるフラッシュ値。
zlib.constants.Z_NO_FLUSH
zlib.constants.Z_PARTIAL_FLUSH
zlib.constants.Z_SYNC_FLUSH
zlib.constants.Z_FULL_FLUSH
zlib.constants.Z_FINISH
zlib.constants.Z_BLOCK
zlib.constants.Z_TREES
圧縮/解凍関数の戻り値コード。負の値はエラーを示し、正の値は特殊な正常なイベントに使用されます。
zlib.constants.Z_OK
zlib.constants.Z_STREAM_END
zlib.constants.Z_NEED_DICT
zlib.constants.Z_ERRNO
zlib.constants.Z_STREAM_ERROR
zlib.constants.Z_DATA_ERROR
zlib.constants.Z_MEM_ERROR
zlib.constants.Z_BUF_ERROR
zlib.constants.Z_VERSION_ERROR
圧縮レベル。
zlib.constants.Z_NO_COMPRESSION
zlib.constants.Z_BEST_SPEED
zlib.constants.Z_BEST_COMPRESSION
zlib.constants.Z_DEFAULT_COMPRESSION
圧縮戦略。
zlib.constants.Z_FILTERED
zlib.constants.Z_HUFFMAN_ONLY
zlib.constants.Z_RLE
zlib.constants.Z_FIXED
zlib.constants.Z_DEFAULT_STRATEGY
Brotli 定数
追加日時: v11.7.0, v10.16.0
Brotli ベースのストリームで使用できるオプションやその他の定数がいくつかあります。
フラッシュ操作
次の値は、Brotli ベースのストリームに対して有効なフラッシュ操作です。
zlib.constants.BROTLI_OPERATION_PROCESS
(すべての操作のデフォルト)zlib.constants.BROTLI_OPERATION_FLUSH
(.flush()
を呼び出す際のデフォルト)zlib.constants.BROTLI_OPERATION_FINISH
(最後のチャンクのデフォルト)zlib.constants.BROTLI_OPERATION_EMIT_METADATA
- この特定の操作は、Node.js のコンテキストでは使いにくい場合があります。ストリーミングレイヤーでは、どのデータがこのフレームに最終的に含まれるかがわかりにくいためです。また、現在、Node.js API を通じてこのデータを使用する方法はありません。
圧縮オプション
Brotli エンコーダに設定できるオプションはいくつかあり、圧縮効率と速度に影響します。キーと値の両方に、zlib.constants
オブジェクトのプロパティとしてアクセスできます。
最も重要なオプションは次のとおりです。
BROTLI_PARAM_MODE
BROTLI_MODE_GENERIC
(デフォルト)BROTLI_MODE_TEXT
、UTF-8 テキストに合わせて調整済みBROTLI_MODE_FONT
、WOFF 2.0 フォントに合わせて調整済み
BROTLI_PARAM_QUALITY
BROTLI_MIN_QUALITY
からBROTLI_MAX_QUALITY
の範囲で、デフォルトはBROTLI_DEFAULT_QUALITY
です。
BROTLI_PARAM_SIZE_HINT
- 予想される入力サイズを表す整数値。入力サイズが不明な場合は
0
がデフォルトです。
- 予想される入力サイズを表す整数値。入力サイズが不明な場合は
以下のフラグは、圧縮アルゴリズムとメモリ使用量の調整に関する高度な制御のために設定できます。
BROTLI_PARAM_LGWIN
BROTLI_MIN_WINDOW_BITS
からBROTLI_MAX_WINDOW_BITS
の範囲で、デフォルトはBROTLI_DEFAULT_WINDOW
です。BROTLI_PARAM_LARGE_WINDOW
フラグが設定されている場合は、BROTLI_LARGE_MAX_WINDOW_BITS
までです。
BROTLI_PARAM_LGBLOCK
BROTLI_MIN_INPUT_BLOCK_BITS
からBROTLI_MAX_INPUT_BLOCK_BITS
の範囲です。
BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING
- ブール値のフラグ。解凍速度を優先して圧縮率を低下させます。
BROTLI_PARAM_LARGE_WINDOW
- ブール値のフラグ。「Large Window Brotli」モードを有効にします(RFC 7932で標準化された Brotli 形式とは互換性がありません)。
BROTLI_PARAM_NPOSTFIX
0
からBROTLI_MAX_NPOSTFIX
の範囲です。
BROTLI_PARAM_NDIRECT
0
から15 \<\< NPOSTFIX
の範囲で、1 \<\< NPOSTFIX
ずつ増加します。
解凍オプション
これらの高度なオプションは、解凍を制御するために使用できます。
BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION
- ブール値のフラグ。内部メモリ割り当てパターンに影響します。
BROTLI_DECODER_PARAM_LARGE_WINDOW
- ブール値のフラグ。「Large Window Brotli」モードを有効にします(RFC 7932で標準化された Brotli 形式とは互換性がありません)。
Class: Options
[履歴]
バージョン | 変更内容 |
---|---|
v14.5.0, v12.19.0 | maxOutputLength オプションがサポートされました。 |
v9.4.0 | dictionary オプションに ArrayBuffer を使用できるようになりました。 |
v8.0.0 | dictionary オプションに Uint8Array を使用できるようになりました。 |
v5.11.0 | finishFlush オプションがサポートされました。 |
v0.11.1 | 追加: v0.11.1 |
zlib ベースの各クラスは options
オブジェクトを取ります。オプションは必須ではありません。
いくつかのオプションは圧縮時のみ関連し、解凍クラスでは無視されます。
flush
<整数> デフォルト:zlib.constants.Z_NO_FLUSH
finishFlush
<整数> デフォルト:zlib.constants.Z_FINISH
chunkSize
<整数> デフォルト:16 * 1024
windowBits
<整数>level
<整数> (圧縮時のみ)memLevel
<整数> (圧縮時のみ)strategy
<整数> (圧縮時のみ)dictionary
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> (deflate/inflate のみ、デフォルトでは空の辞書)info
<ブール値> (true
の場合、buffer
とengine
を含むオブジェクトを返します。)maxOutputLength
<整数> 簡便メソッドを使用する場合の出力サイズを制限します。デフォルト:buffer.kMaxLength
詳細は、deflateInit2
および inflateInit2
のドキュメントを参照してください。
Class: BrotliOptions
[履歴]
バージョン | 変更 |
---|---|
v14.5.0, v12.19.0 | maxOutputLength オプションがサポートされました。 |
v11.7.0 | 追加: v11.7.0 |
Brotli ベースの各クラスは、options
オブジェクトを受け取ります。すべてのオプションは省略可能です。
flush
<整数> デフォルト:zlib.constants.BROTLI_OPERATION_PROCESS
finishFlush
<整数> デフォルト:zlib.constants.BROTLI_OPERATION_FINISH
chunkSize
<整数> デフォルト:16 * 1024
params
<オブジェクト> インデックス付きのBrotli パラメータを含むキーバリューオブジェクト。maxOutputLength
<整数> 簡易メソッドを使用する場合の出力サイズを制限します。デフォルト:buffer.kMaxLength
例:
const stream = zlib.createBrotliCompress({
chunkSize: 32 * 1024,
params: {
[zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,
[zlib.constants.BROTLI_PARAM_QUALITY]: 4,
[zlib.constants.BROTLI_PARAM_SIZE_HINT]: fs.statSync(inputFile).size,
},
})
Class: zlib.BrotliCompress
追加: v11.7.0, v10.16.0
Brotli アルゴリズムを使用してデータを圧縮します。
Class: zlib.BrotliDecompress
追加: v11.7.0, v10.16.0
Brotli アルゴリズムを使用してデータを解凍します。
Class: zlib.Deflate
追加: v0.5.8
deflate を使用してデータを圧縮します。
Class: zlib.DeflateRaw
追加: v0.5.8
deflate を使用してデータを圧縮し、zlib
ヘッダーを追加しません。
Class: zlib.Gunzip
[履歴]
バージョン | 変更 |
---|---|
v6.0.0 | 入力ストリームの末尾にある余分なデータは、'error' イベントを引き起こすようになりました。 |
v5.9.0 | 複数の連結された gzip ファイルメンバーがサポートされるようになりました。 |
v5.0.0 | 切り詰められた入力ストリームは、'error' イベントを引き起こすようになりました。 |
v0.5.8 | 追加: v0.5.8 |
gzip ストリームを解凍します。
クラス: zlib.Gzip
追加されたバージョン: v0.5.8
gzip を使用してデータを圧縮します。
クラス: zlib.Inflate
[履歴]
バージョン | 変更 |
---|---|
v5.0.0 | 切り詰められた入力ストリームは、 теперь будет вызывать событие 'error' 。 |
v0.5.8 | 追加されたバージョン: v0.5.8 |
deflate ストリームを解凍します。
クラス: zlib.InflateRaw
[履歴]
バージョン | 変更 |
---|---|
v6.8.0 | InflateRaw でカスタム辞書がサポートされるようになりました。 |
v5.0.0 | 切り詰められた入力ストリームは、 теперь будет вызывать событие 'error' 。 |
v0.5.8 | 追加されたバージョン: v0.5.8 |
生の deflate ストリームを解凍します。
クラス: zlib.Unzip
追加されたバージョン: v0.5.8
ヘッダーを自動検出することにより、Gzip または Deflate で圧縮されたストリームを解凍します。
クラス: zlib.ZlibBase
[履歴]
バージョン | 変更 |
---|---|
v11.7.0, v10.16.0 | このクラスの名前が Zlib から ZlibBase に変更されました。 |
v0.5.8 | 追加されたバージョン: v0.5.8 |
node:zlib
モジュールによってエクスポートされません。圧縮/解凍クラスの基底クラスであるため、ここに記載されています。
このクラスは stream.Transform
を継承しているため、node:zlib
オブジェクトをパイプや同様のストリーム操作で使用できます。
zlib.bytesWritten
追加されたバージョン: v10.0.0
zlib.bytesWritten
プロパティは、バイトが処理される(圧縮または解凍される、派生クラスに応じて)前に、エンジンに書き込まれたバイト数を指定します。
zlib.crc32(data[, value])
追加されたバージョン: v22.2.0, v20.15.0
data
<string> | <Buffer> | <TypedArray> | <DataView>data
が文字列の場合、計算に使用される前に UTF-8 でエンコードされます。value
<integer> オプションの開始値。32 ビットの符号なし整数である必要があります。デフォルト:0
- 戻り値: <integer> チェックサムを含む 32 ビットの符号なし整数。
data
の 32 ビット 巡回冗長検査 チェックサムを計算します。value
が指定されている場合、それはチェックサムの開始値として使用され、そうでない場合は 0 が開始値として使用されます。
CRC アルゴリズムは、チェックサムを計算し、データ伝送におけるエラーを検出するように設計されています。暗号認証には適していません。
他の API と整合性を保つために、data
が文字列の場合、計算に使用される前に UTF-8 でエンコードされます。ユーザーが Node.js を使用してチェックサムを計算および照合する場合のみ、これはデフォルトで UTF-8 エンコーディングを使用する他の API とうまく機能します。
一部のサードパーティの JavaScript ライブラリは、str.charCodeAt()
に基づいて文字列のチェックサムを計算するため、ブラウザで実行できます。ユーザーがこのようなブラウザのライブラリで計算されたチェックサムと一致させる必要がある場合、Node.js でも実行される場合は、Node.js で同じライブラリを使用する方が良いでしょう。ユーザーが zlib.crc32()
を使用して、そのようなサードパーティライブラリによって生成されたチェックサムと一致させる必要がある場合:
import zlib from 'node:zlib'
import { Buffer } from 'node:buffer'
let crc = zlib.crc32('hello') // 907060870
crc = zlib.crc32('world', crc) // 4192936109
crc = zlib.crc32(Buffer.from('hello', 'utf16le')) // 1427272415
crc = zlib.crc32(Buffer.from('world', 'utf16le'), crc) // 4150509955
const zlib = require('node:zlib')
const { Buffer } = require('node:buffer')
let crc = zlib.crc32('hello') // 907060870
crc = zlib.crc32('world', crc) // 4192936109
crc = zlib.crc32(Buffer.from('hello', 'utf16le')) // 1427272415
crc = zlib.crc32(Buffer.from('world', 'utf16le'), crc) // 4150509955
zlib.close([callback])
追加日時: v0.9.4
callback
<Function>
基盤となるハンドルを閉じます。
zlib.flush([kind, ]callback)
追加日時: v0.5.8
kind
デフォルト: zlib ベースのストリームではzlib.constants.Z_FULL_FLUSH
、Brotli ベースのストリームではzlib.constants.BROTLI_OPERATION_FLUSH
。callback
<Function>
保留中のデータをフラッシュします。安易に呼び出さないでください。時期尚早のフラッシュは、圧縮アルゴリズムの効果に悪影響を及ぼします。
これは内部zlib
の状態からデータのみをフラッシュし、ストリームレベルでのいかなる種類のフラッシュも行いません。むしろ、.write()
への通常の呼び出しのように動作し、つまり、他の保留中の書き込みの後ろにキューに入れられ、ストリームからデータが読み取られるまで出力は生成されません。
zlib.params(level, strategy, callback)
追加日時: v0.11.4
level
<integer>strategy
<integer>callback
<Function>
この関数は、zlib ベースのストリーム(Brotli ではない)でのみ使用できます。
圧縮レベルと圧縮戦略を動的に更新します。deflate アルゴリズムにのみ適用されます。
zlib.reset()
追加日時: v0.7.0
コンプレッサー/デコンプレッサーを工場出荷時のデフォルトにリセットします。inflate アルゴリズムと deflate アルゴリズムのみに適用されます。
zlib.constants
追加日時: v7.0.0
Zlib 関連の定数を列挙するオブジェクトを提供します。
zlib.createBrotliCompress([options])
追加日時: v11.7.0, v10.16.0
options
<brotli options>
新しいBrotliCompress
オブジェクトを作成して返します。
zlib.createBrotliDecompress([options])
追加バージョン: v11.7.0, v10.16.0
options
<brotli options>
新しいBrotliDecompress
オブジェクトを作成して返します。
zlib.createDeflate([options])
追加バージョン: v0.5.8
options
<zlib options>
新しいDeflate
オブジェクトを作成して返します。
zlib.createDeflateRaw([options])
追加バージョン: v0.5.8
options
<zlib options>
新しいDeflateRaw
オブジェクトを作成して返します。
zlib を 1.2.8 から 1.2.11 にアップグレードすると、windowBits
が raw deflate ストリームに対して 8 に設定されている場合の動作が変わりました。zlib は、windowBits
が最初に 8 に設定されていた場合、自動的に 9 に設定していました。新しいバージョンの zlib は例外をスローするため、Node.js は 8 の値を 9 にアップグレードするという元の動作を復元しました。これは、zlib にwindowBits = 9
を渡すと、実際には 8 ビットウィンドウのみを効果的に使用する圧縮ストリームが生成されるためです。
zlib.createGunzip([options])
追加バージョン: v0.5.8
options
<zlib options>
新しいGunzip
オブジェクトを作成して返します。
zlib.createGzip([options])
追加バージョン: v0.5.8
options
<zlib options>
新しいGzip
オブジェクトを作成して返します。例を参照してください。
zlib.createInflate([options])
追加バージョン: v0.5.8
options
<zlib options>
新しいInflate
オブジェクトを作成して返します。
zlib.createInflateRaw([options])
追加バージョン: v0.5.8
options
<zlib options>
新しいInflateRaw
オブジェクトを作成して返します。
zlib.createUnzip([options])
追加バージョン: v0.5.8
options
<zlib options>
新しいUnzip
オブジェクトを作成して返します。
便利なメソッド
これらはすべて、最初の引数としてBuffer
、TypedArray
、DataView
、ArrayBuffer
、または文字列を取り、zlib
クラスにオプションを供給するオプションの第二引数を取り、callback(error, result)
で指定されたコールバックを呼び出します。
すべてのメソッドには*Sync
対応物があり、同じ引数を取りますが、コールバックはありません。
zlib.brotliCompress(buffer[, options], callback)
追加されたバージョン: v11.7.0, v10.16.0
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<brotli options>callback
<Function>
zlib.brotliCompressSync(buffer[, options])
追加されたバージョン: v11.7.0, v10.16.0
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<brotli options>
BrotliCompress
を使用してデータチャンクを圧縮します。
zlib.brotliDecompress(buffer[, options], callback)
追加: v11.7.0, v10.16.0
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<brotli options>callback
<Function>
zlib.brotliDecompressSync(buffer[, options])
追加: v11.7.0, v10.16.0
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<brotli options>
BrotliDecompress
を使用してデータチャンクを解凍します。
zlib.deflate(buffer[, options], callback)
[履歴]
バージョン | 変更 |
---|---|
v9.4.0 | buffer パラメータに ArrayBuffer を使用できるようになりました。 |
v8.0.0 | buffer パラメータに任意の TypedArray または DataView を使用できるようになりました。 |
v8.0.0 | buffer パラメータに Uint8Array を使用できるようになりました。 |
v0.6.0 | 追加: v0.6.0 |
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<zlib options>callback
<Function>
zlib.deflateSync(buffer[, options])
[履歴]
バージョン | 変更 |
---|---|
v9.4.0 | buffer パラメータにArrayBuffer を使用できるようになりました。 |
v8.0.0 | buffer パラメータに任意のTypedArray またはDataView を使用できるようになりました。 |
v8.0.0 | buffer パラメータにUint8Array を使用できるようになりました。 |
v0.11.12 | 追加: v0.11.12 |
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<zlib options>
Deflate
を使用してデータチャンクを圧縮します。
zlib.deflateRaw(buffer[, options], callback)
[履歴]
バージョン | 変更 |
---|---|
v8.0.0 | buffer パラメータに任意のTypedArray またはDataView を使用できるようになりました。 |
v8.0.0 | buffer パラメータにUint8Array を使用できるようになりました。 |
v0.6.0 | 追加: v0.6.0 |
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<zlib options>callback
<Function>
zlib.deflateRawSync(buffer[, options])
[履歴]
バージョン | 変更 |
---|---|
v9.4.0 | buffer パラメータにArrayBuffer を使用できるようになりました。 |
v8.0.0 | buffer パラメータに任意のTypedArray またはDataView を使用できるようになりました。 |
v8.0.0 | buffer パラメータにUint8Array を使用できるようになりました。 |
v0.11.12 | 追加: v0.11.12 |
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<zlib options>
DeflateRaw
を使用してデータチャンクを圧縮します。
zlib.gunzip(buffer[, options], callback)
[履歴]
バージョン | 変更 |
---|---|
v9.4.0 | buffer パラメータに ArrayBuffer を使用できるようになりました。 |
v8.0.0 | buffer パラメータに任意の TypedArray または DataView を使用できるようになりました。 |
v8.0.0 | buffer パラメータに Uint8Array を使用できるようになりました。 |
v0.6.0 | 追加: v0.6.0 |
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<zlib options>callback
<Function>
zlib.gunzipSync(buffer[, options])
[履歴]
バージョン | 変更 |
---|---|
v9.4.0 | buffer パラメータに ArrayBuffer を使用できるようになりました。 |
v8.0.0 | buffer パラメータに任意の TypedArray または DataView を使用できるようになりました。 |
v8.0.0 | buffer パラメータに Uint8Array を使用できるようになりました。 |
v0.11.12 | 追加: v0.11.12 |
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<zlib options>
Gunzip
を使用してデータチャンクを解凍します。
zlib.gzip(buffer[, options], callback)
[履歴]
バージョン | 変更 |
---|---|
v9.4.0 | buffer パラメータに ArrayBuffer を使用できるようになりました。 |
v8.0.0 | buffer パラメータに任意の TypedArray または DataView を使用できるようになりました。 |
v8.0.0 | buffer パラメータに Uint8Array を使用できるようになりました。 |
v0.6.0 | 追加: v0.6.0 |
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<zlib options>callback
<Function>
zlib.gzipSync(buffer[, options])
[履歴]
バージョン | 変更点 |
---|---|
v9.4.0 | buffer パラメータに ArrayBuffer を使用できるようになりました。 |
v8.0.0 | buffer パラメータに任意の TypedArray または DataView を使用できるようになりました。 |
v8.0.0 | buffer パラメータに Uint8Array を使用できるようになりました。 |
v0.11.12 | 追加: v0.11.12 |
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<zlib options>
Gzip
を使用してデータチャンクを圧縮します。
zlib.inflate(buffer[, options], callback)
[履歴]
バージョン | 変更点 |
---|---|
v9.4.0 | buffer パラメータに ArrayBuffer を使用できるようになりました。 |
v8.0.0 | buffer パラメータに任意の TypedArray または DataView を使用できるようになりました。 |
v8.0.0 | buffer パラメータに Uint8Array を使用できるようになりました。 |
v0.6.0 | 追加: v0.6.0 |
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<zlib options>callback
<Function>
zlib.inflateSync(buffer[, options])
[履歴]
バージョン | 変更点 |
---|---|
v9.4.0 | buffer パラメータに ArrayBuffer を使用できるようになりました。 |
v8.0.0 | buffer パラメータに任意の TypedArray または DataView を使用できるようになりました。 |
v8.0.0 | buffer パラメータに Uint8Array を使用できるようになりました。 |
v0.11.12 | 追加: v0.11.12 |
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<zlib options>
Inflate
を使用してデータチャンクを解凍します。
zlib.inflateRaw(buffer[, options], callback)
[履歴]
バージョン | 変更 |
---|---|
v9.4.0 | buffer パラメータに ArrayBuffer を使用できるようになりました。 |
v8.0.0 | buffer パラメータに任意の TypedArray または DataView を使用できるようになりました。 |
v8.0.0 | buffer パラメータに Uint8Array を使用できるようになりました。 |
v0.6.0 | 追加: v0.6.0 |
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<zlib options>callback
<Function>
zlib.inflateRawSync(buffer[, options])
[履歴]
バージョン | 変更 |
---|---|
v9.4.0 | buffer パラメータに ArrayBuffer を使用できるようになりました。 |
v8.0.0 | buffer パラメータに任意の TypedArray または DataView を使用できるようになりました。 |
v8.0.0 | buffer パラメータに Uint8Array を使用できるようになりました。 |
v0.11.12 | 追加: v0.11.12 |
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<zlib options>
InflateRaw
を使用してデータチャンクを解凍します。
zlib.unzip(buffer[, options], callback)
[履歴]
バージョン | 変更 |
---|---|
v9.4.0 | buffer パラメータに ArrayBuffer を使用できるようになりました。 |
v8.0.0 | buffer パラメータに任意の TypedArray または DataView を使用できるようになりました。 |
v8.0.0 | buffer パラメータに Uint8Array を使用できるようになりました。 |
v0.6.0 | 追加: v0.6.0 |
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<zlib options>callback
<Function>
zlib.unzipSync(buffer[, options])
[履歴]
バージョン | 変更 |
---|---|
v9.4.0 | buffer パラメータに ArrayBuffer を使用できるようになりました。 |
v8.0.0 | buffer パラメータに任意の TypedArray または DataView を使用できるようになりました。 |
v8.0.0 | buffer パラメータに Uint8Array を使用できるようになりました。 |
v0.11.12 | 追加: v0.11.12 |
buffer
<Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <string>options
<zlib オプション>
Unzip
を使用してデータチャンクを解凍します。