# Работа с каналами в NodeJS

Ситуация, в которой нам нужно прочитать данные из одного потока и записать их в другой, является достаточно распространенной. Для упрощения такой операции придуманы каналы (англ. pipes).

Давайте посмотрим, как это делается. Пусть у нас есть поток чтения и поток записи:

`let readableStream = fs.createReadStream('readme.txt', 'utf8'); let writeableStream = fs.createWriteStream('writeme.txt');`

Сделаем так, чтобы поток чтения сразу перенаправлялся в поток записи. Для этого у потоков чтения существует метод `pipe`:

`readableStream.pipe(writeableStream);`

С помощью канала прочитайте файл и запишите его данные в другой файл.

## Цепочки

Методы `pipe` можно вызывать цепочкой друг за другом. При этом каждый вызов метода в цепочке позволяет выполнять над данными некоторые операции:

`readableStream.pipe(операция).pipe(операция).pipe(операция);`

Для примера давайте выполним архивацию файла. Для этого нам надо сначала считать файл, затем сжать данные и в конце записать сжатые данные в файл-архив. В этом нам поможет встроенная в NodeJS библиотека `zlib`:

`import { createGzip } from 'zlib';`

Теперь с помощью цепочки методов сначала заархивируем поток чтения, а потом запишем в поток записи:

`readableStream.pipe(createGzip()).pipe(writeableStream);`

Даны `10` файлов. Напишите код, который заархивирует каждый из этих файлов в свой архив.

← →
↑