Strim Node.js
Strim ialah antara muka abstrak dan banyak objek dalam Node melaksanakan antara muka ini. Sebagai contoh, objek permintaan yang memulakan permintaan kepada pelayan http ialah Strim, serta stdout (output standard).
Node.js, Strim mempunyai empat jenis strim:
Boleh dibaca - operasi boleh dibaca.
Boleh Ditulis - Operasi boleh tulis.
Dupleks - operasi dibaca dan boleh ditulis. dan kemudian baca hasilnya.
Semua objek Strim ialah contoh EventEmitter. Peristiwa yang biasa digunakan ialah:
- dicetuskan apabila data boleh dibaca.
tamat - tercetus apabila tiada lagi data untuk dibaca.
ralat - dicetuskan apabila ralat berlaku semasa penerimaan dan penulisan.
selesai - dicetuskan apabila semua data telah ditulis ke sistem asas.
Tutorial ini akan memperkenalkan anda kepada operasi strim yang biasa digunakan.
Baca data daripada strim
php中文网官网地址:www.php.cnBuat fail main.js dengan kod 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("程序执行完毕");
Hasil pelaksanaan kod di atas adalah seperti berikut:
程序执行完毕 php中文网官网地址:www.php.cnStrim penulisanBuat fail main.js, kodnya adalah seperti berikut:
var fs = require("fs"); var data = 'php中文网官网地址:www.php.cn'; // 创建一个可以写入的流,写入到文件 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("程序执行完毕");Atur cara di atas akan menggunakan pembolehubah data Data ditulis ke fail output.txt. Keputusan pelaksanaan kod adalah seperti berikut:
$ node main.js 程序执行完毕 写入完成。
Lihat kandungan fail output.txt:
$ cat output.txt php中文网官网地址:www.php.cnAliran paip
Saluran paip menyediakan mekanisme untuk aliran keluaran ke aliran input . Biasanya kami menggunakannya untuk mendapatkan data dari satu aliran dan menghantar data ke aliran lain.
Seperti yang ditunjukkan dalam gambar di atas, kami membandingkan fail dengan baldi berisi air, dan air adalah kandungan dalam fail Kami menggunakan paip untuk menyambungkannya Kedua baldi itu membolehkan air mengalir dari satu baldi ke baldi yang lain, dengan itu perlahan-lahan menyedari proses penyalinan fail besar.
Dalam contoh berikut, kami membaca kandungan fail dan menulis kandungannya ke fail lain.
Tetapkan kandungan fail input.txt seperti berikut:
php中文网官网地址:www.php.cn 管道流操作实例
Buat fail main.js dengan kod 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 pelaksanaan kod adalah seperti berikut:
$ node main.js 程序执行完毕
Lihat Kandungan fail output.txt:
$ cat output.txt php中文网官网地址:www.php.cn 管道流操作实例Aliran rantaiChaining ialah mekanisme yang menghubungkan aliran output ke aliran lain dan mencipta berbilang rantaian operasi pada setiap aliran. Aliran berantai biasanya digunakan untuk operasi saluran paip. Seterusnya kami akan menggunakan paip dan rantai untuk memampatkan dan menyahmampat fail.
Buat fail compress.js, kodnya adalah seperti 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 pelaksanaan kod adalah seperti berikut:
$ node compress.js 文件压缩完成。
Selepas melaksanakan operasi di atas, kita boleh lihat bahawa input dijana dalam direktori semasa .txt fail termampat input.txt.gz.
Seterusnya, mari kita unzip fail dan buat fail decompress.js dengan kod 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 pelaksanaan kod adalah seperti berikut:
$ node decompress.js 文件解压完成。