pipe는 스트림 사이에 여러 번 연결할 수 있습니다. 다음 코드는 파일을 읽은 후 gzip 방식으로 압축하는 코드입니다.
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 파일이 생성됩니다. 압축된 파일이라 내용물을 읽기는 힘듭니다.