Сколько типов потоков существует в Node.js?
В Node.js потоки (streams) представляют собой мощный способ работы с данными, позволяя обрабатывать данные более эффективно и с меньшими затратами памяти, чем с использованием больших объемов данных сразу. Существует четыре основных типа потоков в Node.js:
Пример использования читаемого потока:
const fs = require('fs');
const readableStream = fs.createReadStream('example.txt');
readableStream.on('data', (chunk) => {
console.log(`Получен кусок данных: ${chunk}`);
});
readableStream.on('end', () => {
console.log('Чтение завершено');
});
Пример использования записываемого потока:
const fs = require('fs');
const writableStream = fs.createWriteStream('output.txt');
writableStream.write('Запись первой строки\n');
writableStream.write('Запись второй строки\n');
writableStream.end('Запись завершена\n');
Пример использования дуплексного потока:
const { Duplex } = require('stream');
const duplexStream = new Duplex({
read(size) {
this.push('Данные для чтения\n');
this.push(null); // Завершение потока
},
write(chunk, encoding, callback) {
console.log(`Получены данные: ${chunk.toString()}`);
callback();
}
});
duplexStream.pipe(process.stdout); // Читаем из потока и выводим в консоль
duplexStream.write('Запись производится\n');
Пример использования трансформационного потока:
const { Transform } = require('stream');
const transformStream = new Transform({
transform(chunk, encoding, callback) {
const upperCaseChunk = chunk.toString().toUpperCase();
this.push(upperCaseChunk);
callback();
}
});
process.stdin.pipe(transformStream).pipe(process.stdout); // Читаем из stdin, преобразуем и выводим в stdout
Заключение
Понимание типов потоков в Node.js является ключевым для эффективной работы с данными. Потоки помогают обрабатывать большие объемы данных с минимальным использованием памяти, что особенно важно для веб-приложений и серверного программирования. Осваивайте потоки, и ваше приложение будет работать быстрее и эффективнее!