Від автора: в Node js потоки — це об’єкти, які дозволяють вам безперервно зчитувати дані з джерела або записувати дані. В Node.js існує чотири типи потоків .
Readable — потік, який використовується для операції читання.
Writable — потік, який використовується для запису.
Duplex — потік, який може використовуватися як для читання, так і для запису.
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 з таким кодом –
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(“Compressed File.”);
Тепер запустіть main.js:
$ node main.js
В результаті ви повинні отримати наступне.
Compressed File.
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.