
106
5
章 ストリーム
const file = process.argv[2];
fs.readFile(file, (err, buffer) => {
zlib.gzip(buffer, (err, buffer) => {
fs.writeFile(file + '.gz', buffer, err => {
console.log('File successfully compressed'); //
ファイルの圧縮に成功
});
});
});
これを
gzip.js
というファイルに保存すれば、次のコマンドで実行できます。
$ node gzip
〈ファイル名〉
上で触れたように、ここでたとえば
1G
バイトあるような巨大なファイルを指定すると、環境によっ
てはエラーメッセージが表示されてコマンドの実行が停止してしまったり、「ファイルの圧縮に成功し
ました」と表示されるもののきちんと圧縮されてい
なかったりしてしまいます。
5.1.2.2
ストリームを利用した
Gzip
の実装
では、どうすれば巨大なファイルを
Gzip
圧縮できるのでしょうか。答えはストリームです。次の
コードは、先ほどのアプリケーションをストリームを使って書き直したものです(
02_gzip_streams/
index.js
)。
const fs = require('fs');
const zlib = require('zlib');
const file = process.argv[2];
fs.createReadStream(file) ...