gzip.js
const zlib = require('zlib');
const fs = require('fs');
const readStream = fs.createReadStream('./readme4.txt');
const zlibStream = zlib.createGzip();
const writeStream = fs.createWriteStream('./readme4.txt.gz');
readStream.pipe(zlibStream).pipe(writeStream);
노드에서는 파일을 압축하는 zlib이라는 모듈도 제공합니다. 이 책에서는 많이 사용하지 않는 모듈이므로 따로 설명하지는 않습니다. 다만, zlib의 createGzip이라는 메서드가 스트림을 지원하므로 readStream과 writeStream 중간에서 파이핑을 할 수 있습니다. 버퍼 데이터가 전달되다가 gzip 압축을 거친 후 파일로 써집니다.
콘솔
$ node gzip
readme4.txt.gz 파일이 생성됩니다. 압축된 파일이라 내용물을 읽기는 힘듭니다.
stream 모듈의 pipeline 메서드를 사용해 여러 개의 파이프를 연결하는 방법도 있습니다.
pipeline.mjs
import { pipeline } from 'stream/promises';
import zlib from 'zlib';
import fs from 'fs';
await pipeline(
fs.createReadStream('./readme4.txt'),
zlib.createGzip(),
fs.createWriteStream('./readme4.txt.gz'),
);