Поток в Node.js — это концептуальная структура для работы с непрерывным потоком данных. Это означает, что вы можете потреблять данные по мере их загрузки или производства, фрагмент за фрагментом (или по частям), вместо того, чтобы загружать все в память перед началом обработки. Потоки могут быть читаемыми, записываемыми или и теми, и другими.

Содержание

  1. Типы потоков
  2. Метод pipe

Типы потоков

  • Читаемый поток: из которого можно читать данные.
  • Записываемый поток: в который можно записывать данные.
  • Дуплексный поток: который является и читаемым, и записываемым.
  • Трансформирующий поток: который является дуплексным и может модифицировать или преобразовывать данные во время записи и чтения.

Потоки присутствуют во многих модулях Node.js, например, http.request(), zlib.createGzip(), fs.createReadStream(), и process.stdout. Все они возвращают потоки.

Метод pipe

Метод pipe позволяет соединить вывод читаемого потока с вводом записываемого потока:

const fs = require('fs');
const readableStream = fs.createReadStream('input.txt');
const writableStream = fs.createWriteStream('output.txt');
readableStream.pipe(writableStream);

В этом примере мы создаем объекты потоков для чтения и записи файлов, а затем передаем данные из читаемого потока в записываемый с помощью метода pipe(). По мере поступления данных в читаемый поток они автоматически передаются в записываемый поток без необходимости явно обрабатывать каждый кусок данных.

Этот метод перенаправляет, или, как часто говорят, “пайпит” данные из читаемого потока в записываемый, следя за тем, чтобы его внутреннее хранилище не переполнялось. Таким образом, pipe упрощает процесс передачи данных между объектами потоков и позволяет работать с большими объемами данных без загрузки всего в память компьютера.

Если вы используете дуплексный поток, можно соединить его с другим потоком:

readable.pipe(duplex).pipe(writable);