Latest web development tutorials

Node.js Streaming (stream)

Stream adalah sebuah antarmuka abstrak, Node memiliki banyak objek mengimplementasikan interface ini. Misalnya, server yang memulai permintaan untuk permintaan http objek adalah Stream, serta stdout (standar output).

Node.js, Streaming Ada empat jenis aliran:

  • Dibaca - operasi dibaca.

  • Ditulis - menulis operasi.

  • Duplex - Operasi tulis dan baca.

  • Transform - operasi data yang akan ditulis dan kemudian membacakan hasil.

Semua benda adalah contoh dari EventEmitter Stream. Peristiwa umum meliputi:

  • Data - dipicu ketika data membaca waktu.

  • end - tanpa memicu data yang lebih mudah dibaca.

  • Kesalahan - dipicu ketika terjadi kesalahan dalam penerimaan dan proses penulisan.

  • finish - Kebakaran ketika semua data telah ditulis untuk sistem yang mendasarinya.

Tutorial ini akan memperkenalkan operasi aliran umum.


Membaca data dari sungai

Membuat file input.txt, sebagai berikut:

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

Membuat file main.js, sebagai berikut:

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

Kode di atas dijalankan sebagai berikut:

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

aliran tulis

Membuat file main.js, sebagai berikut:

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

Data program di atas akan ditulis ke variabel data file output.txt. Hasil eksekusi kode adalah sebagai berikut:

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

Output.txt melihat isi dari file:

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

aliran pipa

Pipeline menyediakan mekanisme untuk input stream aliran output. Kami biasanya digunakan untuk mendapatkan data dan mentransfer data ke aliran lain dari sungai.

Seperti yang ditunjukkan pada gambar di atas, kami membandingkan dokumen ember diisi dengan air, dan air isi dokumen, sehingga kita menghubungkan dua ember air dari ember ke ember lainnya dengan pipa (pipe), sehingga perlahan-lahan menyadari proses replikasi file besar.

Contoh-contoh berikut kita ingin menulis ke file lain dengan membaca isi dari file dan isi.

Pengaturan input.txt dokumen berbunyi sebagai berikut:

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

Membuat file main.js, sebagai berikut:

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

Hasil eksekusi kode adalah sebagai berikut:

$ node main.js 
程序执行完毕

Output.txt melihat isi dari file:

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

rantai Arus

Rantai adalah sungai yang mengalir lain dan membuat beberapa rantai mekanisme aliran operasi dengan menghubungkan output. Rantai aliran umumnya digunakan untuk operasi pipa.

Kita berada pipa dan rantai untuk kompres dan dekompresi file.

Membuat file compress.js, sebagai berikut:

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

Hasil eksekusi kode adalah sebagai berikut:

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

Setelah melaksanakan operasi di atas, kita dapat melihat direktori saat ini dibuat di bawah input.txt berkas input.txt.gz terkompresi.

Selanjutnya, mari kita membongkar file, membuat file decompress.js, sebagai berikut:

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

Hasil eksekusi kode adalah sebagai berikut:

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