Node.js — Потоки

Node.js — Потоки

От автора: в Node js потоки — это объекты, которые позволяют вам непрерывно считывать данные из источника или записывать данные их. В Node.js существует четыре типа потоков .

 

Readable — поток, который используется для операции чтения.

Writable — поток, который используется для записи.

Duplex — поток, который может использоваться как для чтения, так и для записи.

Фреймворк VUE JS: быстрый старт, первые результаты

Получите бесплатный курс и создайте веб-приложение на трендовой Frontend-технологии VUE JS с полного нуля

Узнать подробнее

Transform — тип дуплексного потока, в котором вывод вычисляется на основе вводимых данных.

Каждый тип потока является экземпляром EventEmitter и в разное время запускает несколько событий. Ниже приводятся примеры некоторых из часто используемых событий:

data — это событие запускается, когда данные становятся доступны для чтения.

end — это событие запускается, когда все данные считаны.

error — это событие запускается, когда возникает какая-либо ошибка получения или записи данных.

finish — это событие запускается, когда все данные были сброшены в базовую систему.

В этом руководств описаны основные принципы работы часто используемых операций с потоками.

Чтение из потока

Создайте текстовый файл с именем input.txt со следующим содержимым:

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Создайте файл js с именем main.js со следующим кодом:

var fs = require("fs");
var data = '';
 
// Создание потока readable 
var readerStream = fs.createReadStream('input.txt');
 
// Установка кодировки utf8. 
readerStream.setEncoding('UTF8');
 
// Обработка событий потока --> data, end и error
readerStream.on('data', function(chunk) {
 data += chunk;
});
 
readerStream.on('end',function(){
 console.log(data);
});
 
readerStream.on('error', function(err){
 console.log(err.stack);
});
 
console.log("Program Ended");

Запустите main.js:

$ node main.js

В результате вы должны получить следующее.

Program Ended
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Запись в поток

Создайте файл js с именем main.js со следующим кодом -

Фреймворк VUE JS: быстрый старт, первые результаты

Получите бесплатный курс и создайте веб-приложение на трендовой Frontend-технологии VUE JS с полного нуля

Узнать подробнее
var fs = require("fs");
var data = 'Simply Easy Learning';
 
// Создание потока writable
var writerStream = fs.createWriteStream('output.txt');
 
// Запись данные в поток с установленной кодировкой utf8
writerStream.write(data,'UTF8');
 
// Помечаем конец файла
writerStream.end();
 
// Обработка событий потока --> finish и error
writerStream.on('finish', function() {
 console.log("Write completed.");
});
 
writerStream.on('error', function(err){
 console.log(err.stack);
});
 
console.log("Program Ended");

Запустите файл main.js:

$ node main.js

В результате вы должны получить следующее.

Program Ended
Write completed.

Теперь откройте файл output.txt, созданный в вашем текущем каталоге; он должен содержать следующее:

Simply Easy Learning

Пайпинг потоков

Пайпинг — это механизм, с помощью которого мы предоставляем выходные данные одного потока в качестве входных данных для другого потока. Обычно он используется для получения данных одного потока и передачи их в другой. В Node не существует ограничений по количеству операций пайпинга. Ниже приведен пример операции пайпинга для считывания данных из одного файла и записи их в другой.

Создайте файл js с именем main.js со следующим кодом:

var fs = require("fs");
 
// Создание считываемого потока
var readerStream = fs.createReadStream('input.txt');
 
// Создание записываемого потока
var writerStream = fs.createWriteStream('output.txt');
 
// Пайпинг операций считывания и записи
// считывание input.txt и запись данных в  output.txt
readerStream.pipe(writerStream);
 
console.log("Program Ended");

Теперь запустите main.js:

$ node main.js

В результате вы должны получить следующее.

Program Ended

Откройте файл output.txt, созданный в вашем текущем каталоге; он должен содержать следующее:

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Цепочки потоков

Цепочки — это механизм для подключения вывода одного потока к другому потоку и создания цепочки операций с несколькими потоками. Он обычно используется с операциями пайпинга. Мы используем папинг и цепочку, чтобы сначала заархивировать файл, а затем распаковать его.

Создайте файл js с именем main.js со следующим кодом:

var fs = require("fs");
var zlib = require('zlib');
 
// Архивирование файла file input.txt в input.txt.gz
fs.createReadStream('input.txt')
 .pipe(zlib.createGzip())
 .pipe(fs.createWriteStream('input.txt.gz'));
 
console.log("File Compressed.");

Теперь запустите main.js:

$ node main.js

В результате вы должны получить следующее.

File Compressed.

Input.txt был заархивирован, и в результате в текущем каталоге был создан файл input.txt.gz. Теперь давайте попробуем распаковать тот же файл, используя следующий код:

var fs = require("fs");
var zlib = require('zlib');
 
// Распаковываем файл input.txt.gz в input.txt
fs.createReadStream('input.txt.gz')
 .pipe(zlib.createGunzip())
 .pipe(fs.createWriteStream('input.txt'));
 
console.log("File Decompressed.");

Теперь запустите main.js:

$ node main.js

В результате вы должны получить следующее.

File Decompressed.

Источник: https://www.tutorialspoint.com/

Редакция: Команда webformyself.

Фреймворк VUE JS: быстрый старт, первые результаты

Получите бесплатный курс и создайте веб-приложение на трендовой Frontend-технологии VUE JS с полного нуля

Узнать подробнее

Курс по NodeJS. Основы

Прямо сейчас посмотрите курс по NodeJS!

Смотреть курс

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree