Latest web development tutorials

Node.js flux (stream)

Stream est une interface abstraite, Node possède de nombreux objets implémentent cette interface. Par exemple, le serveur qui a initié la demande de requête http objet est un Stream, ainsi que stdout (sortie standard).

Node.js, Stream Il existe quatre types de flux:

  • Readable - opération Readable.

  • Inscriptibles - les opérations d' écriture.

  • Duplex - lecture et d' écriture.

  • Transformer - données d' exploitation à écrire et lire les résultats.

Tous les objets sont des instances de EventEmitter Stream. événements communs incluent:

  • données - déclenchées lorsque les données temps de lecture.

  • fin - sans déclencher des données plus lisibles.

  • erreur - déclenchée lorsqu'une erreur se produit dans la réception et le processus d'écriture.

  • finition - Se déclenche lorsque toutes les données ont été écrites sur le système sous - jacent.

Ce tutoriel présentera les opérations de flux communs.


Lire les données du flux

Créer un fichier input.txt, comme suit:

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

Créer un fichier main.js, comme suit:

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("程序执行完毕");

Le code ci-dessus est exécuté comme suit:

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

Ecrire flux

Créer un fichier main.js, comme suit:

var fs = require("fs");
var data = '本教程官网地址:www.w3big.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("程序执行完毕");

Les données du programme ci-dessus seront écrites dans le sortie.txt de fichier de données variables. résultats de l'exécution de code sont les suivantes:

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

Output.txt afficher le contenu du fichier:

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

flux de pipeline

Pipeline fournit un mécanisme pour le flux d'entrée d'écoulement de sortie. Nous avons l'habitude utilisé pour obtenir des données et transférer les données vers un autre flux à partir d'un flux.

Comme le montre l'image ci-dessus, nous avons comparé le seau rempli d'eau de documents, et l'eau est le contenu des documents, de sorte que nous nous connectons deux seaux d'eau d'un seau dans l'autre seau avec un tuyau (pipe), de sorte lentement réalisé le processus de réplication de fichiers volumineux.

Les exemples suivants nous voulons écrire dans un autre fichier en lisant le contenu d'un fichier et le contenu.

Réglage de input.txt le document se lit comme suit:

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

Créer un fichier main.js, comme suit:

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("程序执行完毕");

résultats de l'exécution de code sont les suivantes:

$ node main.js 
程序执行完毕

Output.txt afficher le contenu du fichier:

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

Débit de la chaîne

Chain est un autre ruisseau qui coule et de créer de multiples chaîne mécanisme flux d'exploitation en connectant la sortie. flux de la chaîne généralement utilisé pour le fonctionnement du pipeline.

Ensuite, nous sommes tuyau et de la chaîne pour compresser et décompresser des fichiers.

Créer un fichier compress.js, comme suit:

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

résultats de l'exécution de code sont les suivantes:

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

Après l'exécution de l'opération ci-dessus, nous pouvons voir le répertoire courant créé sous input.txt input.txt.gz fichier compressé.

Ensuite, nous allons décompresser les fichiers, créez decompress.js fichier, comme suit:

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

résultats de l'exécution de code sont les suivantes:

$ node decompress.js 
文件解压完成。