Потоки — это объекты, которые позволяют непрерывно читать данные из источника или записывать данные в пункт назначения. В Node.js есть четыре типа потоков:
-
Readable — Поток, который используется для операции чтения.
-
Writable — Поток, который используется для операции записи.
-
Дуплекс — Поток, который можно использовать как для чтения, так и для записи.
-
Преобразование — тип дуплексного потока, в котором выход вычисляется на основе входных данных.
Readable — Поток, который используется для операции чтения.
Writable — Поток, который используется для операции записи.
Дуплекс — Поток, который можно использовать как для чтения, так и для записи.
Преобразование — тип дуплексного потока, в котором выход вычисляется на основе входных данных.
Каждый тип потока является экземпляром EventEmitter и генерирует несколько событий в разное время. Например, некоторые из наиболее часто используемых событий —
-
data — это событие вызывается, когда есть данные, доступные для чтения.
-
end — это событие вызывается, когда больше нет данных для чтения.
-
error — это событие вызывается при любой ошибке при получении или записи данных.
-
завершить — это событие вызывается, когда все данные были сброшены в базовую систему.
data — это событие вызывается, когда есть данные, доступные для чтения.
end — это событие вызывается, когда больше нет данных для чтения.
error — это событие вызывается при любой ошибке при получении или записи данных.
завершить — это событие вызывается, когда все данные были сброшены в базовую систему.
Это руководство дает базовое представление о наиболее часто используемых операциях в Streams.
Чтение из потока
Создайте текстовый файл с именем 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 = ''; // Create a readable stream var readerStream = fs.createReadStream('input.txt'); // Set the encoding to be utf8. readerStream.setEncoding('UTF8'); // Handle stream events --> data, end, and 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'; // Create a writable stream var writerStream = fs.createWriteStream('output.txt'); // Write the data to stream with encoding to be utf8 writerStream.write(data,'UTF8'); // Mark the end of file writerStream.end(); // Handle stream events --> finish, and 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
Трубить потоки
Трубопровод — это механизм, в котором мы предоставляем вывод одного потока в качестве ввода в другой поток. Обычно он используется для получения данных из одного потока и передачи вывода этого потока в другой поток. Там нет ограничений на операции трубопроводов. Теперь мы покажем пример трубопровода для чтения из одного файла и записи его в другой файл.
Создайте js-файл с именем main.js со следующим кодом —
var fs = require("fs"); // Create a readable stream var readerStream = fs.createReadStream('input.txt'); // Create a writable stream var writerStream = fs.createWriteStream('output.txt'); // Pipe the read and write operations // read input.txt and write data to 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'); // Compress the file input.txt to 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'); // Decompress the file input.txt.gz to input.txt fs.createReadStream('input.txt.gz') .pipe(zlib.createGunzip()) .pipe(fs.createWriteStream('input.txt')); console.log("File Decompressed.");
Теперь запустите main.js, чтобы увидеть результат —
$ node main.js
Проверьте вывод.