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 文件解压完成。