Konsep Utama:
pipe()
Readable.pause()
, dan Readable.resume()
menawarkan kawalan berbutir ke atas aliran data, meningkatkan fungsi aliran. readable.unpipe()
Memahami Streams:
aliran sama dengan paip UNIX, membolehkan pemindahan data tanpa usaha dari sumber ke destinasi. Pada asasnya, aliran adalah dengan kaedah khusus. Kaedah yang dilaksanakan menentukan sama ada aliran boleh dibaca, boleh ditulis, atau dupleks. Aliran yang boleh dibaca memberikan input data; Aliran yang boleh ditulis mengendalikan output data. EventEmitter
menyediakan keupayaan aliran fail yang boleh dibaca dan ditulis. fs
aliran yang boleh dibaca:
Aliran yang boleh dibaca membaca data dari sumber (fail, penampan dalam memori, atau aliran lain). Menjadi s, mereka mencetuskan pelbagai peristiwa. Kami menggunakan peristiwa ini untuk berinteraksi dengan sungai. EventEmitter
Membaca dari sungai:
Pendekatan yang paling biasa adalah untuk mendengar acara dan melampirkan panggilan balik. Apabila data tersedia, kebakaran acara data
, melaksanakan panggilan balik. data
const fs = require('fs'); const readableStream = fs.createReadStream('file.txt'); let data = ''; readableStream.on('data', (chunk) => { data += chunk; }); readableStream.on('end', () => { console.log(data); });
Mewujudkan aliran yang boleh dibaca. Pada mulanya statik, ia mula mengalir apabila melampirkan pendengar acara fs.createReadStream()
. Potongan data kemudiannya diserahkan kepada panggilan balik. Kekerapan peristiwa data
ditentukan oleh pelaksanaan aliran (mis., Permintaan HTTP mungkin memancarkan peristiwa setiap kb, manakala aliran fail mungkin memancarkan setiap baris). data
memberi isyarat akhir data. end
pada contoh aliran sehingga semua data dibaca: read()
const fs = require('fs'); const readableStream = fs.createReadStream('file.txt'); let data = ''; readableStream.on('data', (chunk) => { data += chunk; }); readableStream.on('end', () => { console.log(data); });
read()
mengambil data dari penampan dalaman. Ia kembali null
apabila tiada data kekal. Acara readable
menunjukkan ketersediaan data.
Menetapkan Pengekodan:
Data biasanya objek Buffer
. Untuk rentetan, gunakan Readable.setEncoding()
:
const fs = require('fs'); const readableStream = fs.createReadStream('file.txt'); let data = ''; let chunk; readableStream.on('readable', () => { while ((chunk = readableStream.read()) !== null) { data += chunk; } }); readableStream.on('end', () => { console.log(data); });
ini menafsirkan data sebagai UTF-8, menyampaikannya sebagai rentetan ke panggil balik.
Piping:
Piping memudahkan pemindahan data antara sumber dan destinasi:
const fs = require('fs'); const readableStream = fs.createReadStream('file.txt'); let data = ''; readableStream.setEncoding('utf8'); readableStream.on('data', (chunk) => { data += chunk; }); readableStream.on('end', () => { console.log(data); });
pipe()
Mengendalikan aliran data secara automatik.
Chaining:
aliran boleh dirantai:
const fs = require('fs'); const readableStream = fs.createReadStream('file1.txt'); const writableStream = fs.createWriteStream('file2.txt'); readableStream.pipe(writableStream);
Decompresses ini input.txt.gz
dan menulis hasilnya kepada output.txt
.
kaedah aliran boleh dibaca tambahan:
Readable.pause()
: Jeda aliran. Readable.resume()
: Sambungkan aliran yang dijeda. readable.unpipe()
: Mengeluarkan aliran destinasi dari paip. Streams wrable:
Stream yang boleh ditulis menghantar data ke destinasi. Seperti aliran yang boleh dibaca, mereka EventEmitter
s.
Menulis ke sungai:
Gunakan write()
untuk menghantar data:
const fs = require('fs'); const zlib = require('zlib'); fs.createReadStream('input.txt.gz') .pipe(zlib.createGunzip()) .pipe(fs.createWriteStream('output.txt'));
write()
Mengembalikan kejayaan yang menunjukkan boolean. Jika palsu, aliran itu penuh sepenuhnya; Tunggu acara drain
sebelum menulis lebih lanjut.
Akhir data:
Panggil end()
untuk memberi isyarat kepada akhir data. Acara finish
dipancarkan selepas semua data dibuang. Anda tidak boleh menulis selepas memanggil end()
.
Peristiwa Stream yang penting:
error
: Menunjukkan ralat. pipe
: dipancarkan apabila aliran yang boleh dibaca disalurkan. unpipe
: dipancarkan apabila unpipe()
dipanggil pada aliran yang boleh dibaca. Kesimpulan:
aliran adalah ciri yang kuat dalam node.js, meningkatkan kecekapan I/O. Memahami aliran, paip, dan chaining membolehkan menulis kod yang bersih dan pelukis.
Node.js Streams FAQ:
Apakah aliran Node.js?
Membuat aliran yang boleh dibaca?
stream.Readable
_read
Kes penggunaan biasa untuk aliran yang boleh dibaca?
Membuat aliran yang boleh ditulis?
Kegunaan umum aliran yang boleh ditulis? Menyimpan data ke fail, menghantar data ke perkhidmatan.
aliran dupleks? menggabungkan fungsi yang boleh dibaca dan ditulis.
Transformasi Streams? Ubah suai data ketika ia melewati (mis., Mampatan, penyulitan).
data paip antara aliran? Gunakan kaedah .pipe()
.
Amalan terbaik untuk bekerja dengan aliran Node.js?
util.promisify
Atas ialah kandungan terperinci Asas -asas aliran node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!