Ответ
В Node.js есть четыре основных типа потоков, реализующих соответствующие абстракции:
-
Readable — поток для чтения данных (например, из файла, HTTP-запроса).
const fs = require('fs'); const readableStream = fs.createReadStream('./input.txt'); -
Writable — поток для записи данных (например, в файл, HTTP-ответ).
const writableStream = fs.createWriteStream('./output.txt'); -
Duplex — поток, который одновременно является и Readable, и Writable (например, TCP-сокет).
const { Duplex } = require('stream'); const myDuplex = new Duplex({ read(size) { /* ... */ }, write(chunk, encoding, callback) { /* ... */ } }); -
Transform — особый тип Duplex-потока, предназначенный для модификации данных на лету (например, сжатие, шифрование).
const { Transform } = require('stream'); const upperCaseTransform = new Transform({ transform(chunk, encoding, callback) { this.push(chunk.toString().toUpperCase()); callback(); } });
Потоки также могут работать в двух режимах:
- Paused (остановленный): данные читаются только после вызова
.read(). - Flowing (текущий): данные автоматически передаются в обработчики событий, такие как
'data'.
Использование потоков критически важно для эффективной обработки больших объемов данных без загрузки всего набора в память, что является ключевым преимуществом Node.js.