От автора: в Node js потоки — это объекты, которые позволяют вам непрерывно считывать данные из источника или записывать данные их. В Node.js существует четыре типа потоков .
Readable — поток, который используется для операции чтения.
Writable — поток, который используется для записи.
Duplex — поток, который может использоваться как для чтения, так и для записи.
Transform — тип дуплексного потока, в котором вывод вычисляется на основе вводимых данных.
Каждый тип потока является экземпляром EventEmitter и в разное время запускает несколько событий. Ниже приводятся примеры некоторых из часто используемых событий:
data — это событие запускается, когда данные становятся доступны для чтения.
end — это событие запускается, когда все данные считаны.
error — это событие запускается, когда возникает какая-либо ошибка получения или записи данных.
finish — это событие запускается, когда все данные были сброшены в базовую систему.
В этом руководств описаны основные принципы работы часто используемых операций с потоками.
Чтение из потока
Создайте текстовый файл с именем input.txt со следующим содержимым:
1 2 |
Tutorials Point is giving self learning content to teach the world in simple and easy way!!!!! |
Создайте файл js с именем main.js со следующим кодом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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:
1 |
$ node main.js |
В результате вы должны получить следующее.
1 2 3 |
Program Ended Tutorials Point is giving self learning content to teach the world in simple and easy way!!!!! |
Запись в поток
Создайте файл js с именем main.js со следующим кодом —
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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:
1 |
$ node main.js |
В результате вы должны получить следующее.
1 2 |
Program Ended Write completed. |
Теперь откройте файл output.txt, созданный в вашем текущем каталоге; он должен содержать следующее:
1 |
Simply Easy Learning |
Пайпинг потоков
Пайпинг — это механизм, с помощью которого мы предоставляем выходные данные одного потока в качестве входных данных для другого потока. Обычно он используется для получения данных одного потока и передачи их в другой. В Node не существует ограничений по количеству операций пайпинга. Ниже приведен пример операции пайпинга для считывания данных из одного файла и записи их в другой.
Создайте файл js с именем main.js со следующим кодом:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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:
1 |
$ node main.js |
В результате вы должны получить следующее.
1 |
Program Ended |
Откройте файл output.txt, созданный в вашем текущем каталоге; он должен содержать следующее:
1 2 |
Tutorials Point is giving self learning content to teach the world in simple and easy way!!!!! |
Цепочки потоков
Цепочки — это механизм для подключения вывода одного потока к другому потоку и создания цепочки операций с несколькими потоками. Он обычно используется с операциями пайпинга. Мы используем папинг и цепочку, чтобы сначала заархивировать файл, а затем распаковать его.
Создайте файл js с именем main.js со следующим кодом:
1 2 3 4 5 6 7 8 9 |
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:
1 |
$ node main.js |
В результате вы должны получить следующее.
1 |
File Compressed. |
Input.txt был заархивирован, и в результате в текущем каталоге был создан файл input.txt.gz. Теперь давайте попробуем распаковать тот же файл, используя следующий код:
1 2 3 4 5 6 7 8 9 |
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:
1 |
$ node main.js |
В результате вы должны получить следующее.
1 |
File Decompressed. |
Источник: //www.tutorialspoint.com/
Редакция: Команда webformyself.