Telegram Group & Telegram Channel
Потоки записи в Node.js — практическое руководство

Node.js предоставляет мощную абстракцию ввода-вывода — Streams (потоки), которые позволяют эффективно обрабатывать данные частями, особенно когда речь идёт о больших объёмах данных. В этом руководстве мы сосредоточимся на Writable Streams — потоках, в которые можно записывать данные.

Что такое Writable Stream?

Writable Stream — это абстракция для источника данных, в который можно записывать. Примеры:

- fs.createWriteStream() — запись в файл
- http.request() — отправка HTTP-запросов
- net.Socket — запись в TCP-сокет
- process.stdout — вывод в консоль

Основные методы и события

Метод .write(chunk, [encoding], [callback])

Используется для записи данных в поток. Возвращает true, если поток готов принять ещё данные, иначе — false.


const fs = require('fs');
const stream = fs.createWriteStream('output.txt');

const result = stream.write('Hello, world!');
console.log(result); // true или false


Метод .end([chunk], [encoding], [callback])

Завершает поток. При необходимости можно передать финальный кусок данных.


stream.end('Final data');


События

- drain — вызывается, когда поток снова готов к записи (если ранее вернул false).
- finish — вызывается после завершения записи (после .end()).
- error — при возникновении ошибки.


stream.on('finish', () => console.log('Запись завершена.'));
stream.on('error', err => console.error('Ошибка:', err));


Управление потоком вручную

Когда stream.write() возвращает false, это означает, что внутренний буфер переполнен. Чтобы избежать перегрузки, стоит дождаться события drain:


function writeMany(stream, data, times) {
let i = 0;
function write() {
while (i < times) {
const ok = stream.write(data);
if (!ok) {
stream.once('drain', write);
return;
}
i++;
}
stream.end();
}
write();
}

writeMany(fs.createWriteStream('big.txt'), 'data\n', 10000);


Пользовательские Writable Streams

Вы можете создать свой Writable Stream, расширив Writable из модуля stream:


const { Writable } = require('stream');

class Logger extends Writable {
_write(chunk, encoding, callback) {
console.log(`LOG: ${chunk.toString()}`);
callback();
}
}

const logger = new Logger();
logger.write('Hello\n');
logger.end('Bye\n');


Итого

Writable Streams — ключевой инструмент в Node.js для эффективной записи данных. Они позволяют управлять потоком, обрабатывать ошибки и даже создавать свои реализации.

https://pavel-romanov.com/writable-streams-in-nodejs-a-practical-guide

✍️ @nodejs_lib



tg-me.com/nodejs_lib/345
Create:
Last Update:

Потоки записи в Node.js — практическое руководство

Node.js предоставляет мощную абстракцию ввода-вывода — Streams (потоки), которые позволяют эффективно обрабатывать данные частями, особенно когда речь идёт о больших объёмах данных. В этом руководстве мы сосредоточимся на Writable Streams — потоках, в которые можно записывать данные.

Что такое Writable Stream?

Writable Stream — это абстракция для источника данных, в который можно записывать. Примеры:

- fs.createWriteStream() — запись в файл
- http.request() — отправка HTTP-запросов
- net.Socket — запись в TCP-сокет
- process.stdout — вывод в консоль

Основные методы и события

Метод .write(chunk, [encoding], [callback])

Используется для записи данных в поток. Возвращает true, если поток готов принять ещё данные, иначе — false.


const fs = require('fs');
const stream = fs.createWriteStream('output.txt');

const result = stream.write('Hello, world!');
console.log(result); // true или false


Метод .end([chunk], [encoding], [callback])

Завершает поток. При необходимости можно передать финальный кусок данных.


stream.end('Final data');


События

- drain — вызывается, когда поток снова готов к записи (если ранее вернул false).
- finish — вызывается после завершения записи (после .end()).
- error — при возникновении ошибки.


stream.on('finish', () => console.log('Запись завершена.'));
stream.on('error', err => console.error('Ошибка:', err));


Управление потоком вручную

Когда stream.write() возвращает false, это означает, что внутренний буфер переполнен. Чтобы избежать перегрузки, стоит дождаться события drain:


function writeMany(stream, data, times) {
let i = 0;
function write() {
while (i < times) {
const ok = stream.write(data);
if (!ok) {
stream.once('drain', write);
return;
}
i++;
}
stream.end();
}
write();
}

writeMany(fs.createWriteStream('big.txt'), 'data\n', 10000);


Пользовательские Writable Streams

Вы можете создать свой Writable Stream, расширив Writable из модуля stream:


const { Writable } = require('stream');

class Logger extends Writable {
_write(chunk, encoding, callback) {
console.log(`LOG: ${chunk.toString()}`);
callback();
}
}

const logger = new Logger();
logger.write('Hello\n');
logger.end('Bye\n');


Итого

Writable Streams — ключевой инструмент в Node.js для эффективной записи данных. Они позволяют управлять потоком, обрабатывать ошибки и даже создавать свои реализации.

https://pavel-romanov.com/writable-streams-in-nodejs-a-practical-guide

✍️ @nodejs_lib

BY Node JS


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/nodejs_lib/345

View MORE
Open in Telegram


telegram Telegram | DID YOU KNOW?

Date: |

What Is Bitcoin?

Bitcoin is a decentralized digital currency that you can buy, sell and exchange directly, without an intermediary like a bank. Bitcoin’s creator, Satoshi Nakamoto, originally described the need for “an electronic payment system based on cryptographic proof instead of trust.” Each and every Bitcoin transaction that’s ever been made exists on a public ledger accessible to everyone, making transactions hard to reverse and difficult to fake. That’s by design: Core to their decentralized nature, Bitcoins aren’t backed by the government or any issuing institution, and there’s nothing to guarantee their value besides the proof baked in the heart of the system. “The reason why it’s worth money is simply because we, as people, decided it has value—same as gold,” says Anton Mozgovoy, co-founder & CEO of digital financial service company Holyheld.

telegram from cn


Telegram Node JS
FROM USA