Latest web development tutorials

Node.js Stream (flusso)

Stream è un'interfaccia astratta, Node ha molti oggetti implementano questa interfaccia. Ad esempio, il server che ha avviato la richiesta per la richiesta http oggetto è un flusso, nonché stdout (standard output).

Node.js, Stream Ci sono quattro tipi di flusso:

  • Leggibile - operazione leggibile.

  • Scrivibile - le operazioni di scrittura.

  • Duplex - lettura e scrittura.

  • Trasforma - operano dati da scrivere e leggere i risultati.

Tutti gli oggetti sono istanze di EventEmitter Stream. eventi comuni includono:

  • Dati - trasmesso per la lettura dei dati di tempo.

  • fine - senza innescare dati più leggibili.

  • errore - attivato quando si verifica un errore nella ricezione e il processo di scrittura.

  • finitura - Viene eseguito quando tutti i dati sono stati scritti per il sistema sottostante.

Questo tutorial vi introdurrà le operazioni di flusso più comuni.


Leggere i dati dal flusso

Creare file di input.txt, come segue:

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

Creare file di main.js, come segue:

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

Il codice di cui sopra viene eseguita come segue:

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

Scrivi flusso

Creare file di main.js, come segue:

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

I dati del programma di cui sopra saranno scritti nel output.txt file con dati variabili. risultati di esecuzione del codice sono i seguenti:

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

Output.txt visualizzare il contenuto del file:

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

flusso Pipeline

Pipeline fornisce un meccanismo per il flusso di ingresso del flusso in uscita. Noi di solito utilizzato per ottenere i dati e trasferire i dati ad un altro corso d'acqua da un ruscello.

Come mostrato nella foto sopra, abbiamo confrontato il secchio documenti riempito con acqua, e l'acqua è il contenuto dei documenti, in modo da collegare due secchi d'acqua da un secchio nell'altro secchio con un tubo (tubo), così realizzato lentamente i file di grandi dimensioni processo di replica.

Gli esempi che seguono vogliamo scrivere un altro file leggendo il contenuto di un file e il contenuto.

Impostazione input.txt documento recita come segue:

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

Creare file di main.js, come segue:

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

risultati di esecuzione del codice sono i seguenti:

$ node main.js 
程序执行完毕

Output.txt visualizzare il contenuto del file:

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

Flusso catena

Catena è un altro ruscello che scorre e creare più flussi di catena meccanismo operativo collegando l'uscita. Flusso catena generalmente utilizzato per il funzionamento pipeline.

Successivo siamo tubo e catena per comprimere e decomprimere i file.

Creare file di compress.js, come segue:

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

risultati di esecuzione del codice sono i seguenti:

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

Dopo aver eseguito l'operazione di cui sopra, possiamo vedere la directory corrente creata sotto input.txt input.txt.gz file compresso.

Quindi, cerchiamo di decomprimere i file, creare decompress.js di file, come segue:

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

risultati di esecuzione del codice sono i seguenti:

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