Latest web development tutorials

Node.js Strom (Stream)

Strom ist eine abstrakte Schnittstelle, hat Knoten viele Objekte diese Schnittstelle implementieren. Zum Beispiel kann der Server, der die Anforderung für http-Request-Objekt initiiert ist ein Bach, sowie stdout (Standardausgabe).

Node.js, Stream Es gibt vier Arten von Flow:

  • Lesbare - Lesbare Betrieb.

  • Beschreibbare - Schreiboperationen.

  • Duplex - Lese- und Schreiboperationen.

  • Transformation - Betriebsdaten geschrieben werden und dann die Ergebnisse ausgelesen.

Alle Objekte sind Instanzen von EventEmitter Stroms. Gemeinsame Veranstaltungen gehören:

  • Daten - ausgelöst , wenn Daten gelesen.

  • Ende - ohne lesbarer Daten auszulösen.

  • Fehler - dann ausgelöst , wenn ein Fehler auftritt , in der Rezeption und den Schreibprozess.

  • Finish - Wird ausgelöst , wenn alle Daten an das zugrunde liegende System geschrieben.

Dieses Tutorial wird gemeinsam Stream-Operationen einzuführen.


Lesen Sie Daten aus dem Stream

Erstellen Sie input.txt Datei wie folgt:

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

Erstellen Sie main.js Datei wie folgt:

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

Der obige Code wird wie folgt ausgeführt:

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

Schreibstrom

Erstellen Sie main.js Datei wie folgt:

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

Die obigen Programmdaten werden an den variablen Datendatei output.txt geschrieben werden. Codeausführung Ergebnisse sind wie folgt:

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

Output.txt den Inhalt der Datei anzuzeigen:

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

Pipeline fließen

Pipeline stellt einen Mechanismus für den Ausgangsfluss Eingabestrom. Wir haben in der Regel Daten zu erhalten und die Daten an einem anderen Strom aus einem Stream übertragen.

Wie oben im Bild gezeigt, verglichen wir die Eimer Dokumente mit Wasser gefüllt, und das Wasser ist der Inhalt der Dokumente, so dass wir zwei Eimer Wasser aus einem Eimer in den anderen Eimer mit einem Rohr (Rohr) verbinden, so der Replikationsprozess große Dateien langsam realisiert.

Die folgenden Beispiele wollen wir durch das Lesen des Inhalts einer Datei und die Inhalte auf eine andere Datei zu schreiben.

Einstellen input.txt Dokument lautet wie folgt:

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

Erstellen Sie main.js Datei wie folgt:

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

Codeausführung Ergebnisse sind wie folgt:

$ node main.js 
程序执行完毕

Output.txt den Inhalt der Datei anzuzeigen:

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

Kettenfluss

Kette ist ein weiterer fließenden Strom und mehrere Streams Betriebswerkskette erstellen, indem Sie den Ausgang anschließen. Kettenstrom in der Regel für Pipeline-Betrieb verwendet.

Als nächstes sind wir Rohr und Kette zu komprimieren und Dateien zu dekomprimieren.

Erstellen Sie compress.js Datei wie folgt:

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

Codeausführung Ergebnisse sind wie folgt:

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

Nach der obigen Operation ausgeführt wird, können wir das aktuelle Verzeichnis unter input.txt komprimierte Datei input.txt.gz erstellt zu sehen.

Als nächstes wollen wir die Dateien entpacken, decompress.js Datei zu erstellen, wie folgt:

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

Codeausführung Ergebnisse sind wie folgt:

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