Лучшее руководство по Node.js поток (поток) в 2024 году. В этом руководстве вы можете изучить Чтение данных из потока,Написать поток,поток трубопровода,Flow Chain,

Node.js поток (поток)

Поток представляет собой абстрактный интерфейс, узел имеет множество объектов реализуют этот интерфейс. Например, сервер, который инициировал запрос на объект запроса HTTP является потоком, а также стандартный вывод (стандартный вывод).

Node.js, поток Есть четыре типа потока:

  • Читаемые - читаемый операция.

  • Writable - операции записи.

  • Дуплекс - операции чтения и записи.

  • Transform - операционные данные должны быть записаны , а затем зачитывает результаты.

Все объекты являются экземплярами EventEmitter Stream. Общие мероприятия включают в себя:

  • Данные - срабатывает , когда данные времени считывания.

  • конец - не вызывая более считываемые данные.

  • Ошибка - активируется при возникновении ошибки в приеме и процесса записи.

  • отделка - Пожары , когда все данные были записаны в базовой системе.

Этот учебник будет ввести общие операции потока.


Чтение данных из потока

Создание input.txt файл, следующим образом:

本教程官网地址:www.w3write.com

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

var fs = require("fs");
var data = '';

// 创建可读流
var readerStream = fs.createReadStream('input.txt');

// 设置编码为 utf8。
readerStream.setEncoding('UTF8');

// 处理流事件 --> 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("程序执行完毕");

Приведенный выше код выполняется следующим образом:

程序执行完毕
本教程官网地址:www.w3write.com

Написать поток

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

var fs = require("fs");
var data = '本教程官网地址:www.w3write.com';

// 创建一个可以写入的流,写入到文件 output.txt 中
var writerStream = fs.createWriteStream('output.txt');

// 使用 utf8 编码写入数据
writerStream.write(data,'UTF8');

// 标记文件末尾
writerStream.end();

// 处理流事件 --> data, end, and error
writerStream.on('finish', function() {
    console.log("写入完成。");
});

writerStream.on('error', function(err){
   console.log(err.stack);
});

console.log("程序执行完毕");

Приведенные выше данные программы будут записаны в переменной output.txt файла данных. Результаты выполнения кода заключаются в следующем:

$ node main.js 
程序执行完毕
写入完成。

Output.txt просмотреть содержимое файла:

$ cat output.txt 
本教程官网地址:www.w3write.com

поток трубопровода

Трубопровод обеспечивает механизм для входного потока выходного потока. Как правило, мы использовали для получения данных, и передавать данные в другой поток из потока.

Как показано на рисунке выше, мы сравнили документы ведро с водой, а вода содержимое документов, так что мы подключаем два ведра воды из ведра в другое ведро с трубой (труба), так медленно реализуется процесс репликации больших файлов.

Следующие примеры, которые мы хотим записать в другой файл, читая содержимое файла и содержимое.

Установка input.txt документа гласит:

本教程官网地址:www.w3write.com
管道流操作实例

Создание 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("程序执行完毕");

Результаты выполнения кода заключаются в следующем:

$ node main.js 
程序执行完毕

Output.txt просмотреть содержимое файла:

$ cat output.txt 
本教程官网地址:www.w3write.com
管道流操作实例

Flow Chain

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

Далее мы трубы и цепи для сжатия и распаковки файлов.

Создание compress.js файл, следующим образом:

var fs = require("fs");
var zlib = require('zlib');

// 压缩 input.txt 文件为 input.txt.gz
fs.createReadStream('input.txt')
  .pipe(zlib.createGzip())
  .pipe(fs.createWriteStream('input.txt.gz'));
  
console.log("文件压缩完成。");

Результаты выполнения кода заключаются в следующем:

$ node compress.js 
文件压缩完成。

После выполнения вышеуказанной операции, мы можем увидеть текущий каталог, созданный под input.txt сжатого файла input.txt.gz.

Далее, давайте распаковать файлы, создавать decompress.js файл, следующим образом:

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("文件解压完成。");

Результаты выполнения кода заключаются в следующем:

$ node decompress.js 
文件解压完成。
Node.js поток (поток)
10/30