Rumah  >  Artikel  >  hujung hadapan web  >  Artikel untuk bercakap tentang strim dalam Node

Artikel untuk bercakap tentang strim dalam Node

青灯夜游
青灯夜游ke hadapan
2023-02-27 19:17:441528semak imbas

Apakah aliran? Bagaimana untuk memahami aliran? Artikel berikut akan memberi anda pemahaman yang mendalam tentang aliran dalam Nodejs, saya harap ia akan membantu anda!

Artikel untuk bercakap tentang strim dalam Node

aliran ialah aliran, yang boleh difahami sebagai satu siri bait yang wujud seperti aliran air. Menurut penjelasan dokumen rasmi:

Strim ialah antara muka abstrak untuk bekerja dengan data penstriman dalam Node.js.

A strim adalah untuk Memproses data aliran dalam Node.js ialah antara muka abstrak untuk bait berterusan. Terdapat 4 jenis strim asas, dan artikel ini terutamanya memperkenalkan dua daripadanya - strim boleh dibaca dan strim boleh tulis.

Boleh Dibaca

Kita boleh mencipta strim boleh dibacafs.createReadStream() melalui readableStream, parameter pertama boleh menjadi fail untuk dibaca Laluan, contohnya, kandungan daripada test.txt fail sedia ada ialah:

hello juejin

Parameter kedua (pilihan) boleh dihantar dalam objek pilihan untuk mengawal kedudukan mula dan tamat bacaan data, dsb.: [Tutorial berkaitan Disyorkan: tutorial video nodejs]

const fs = require('fs')

const readableStream = fs.createReadStream('./test.txt', {
  start: 6,
  end: 11
})

Perhatikan bahawa data yang dibaca termasuk start dan end. Seperti yang dinyatakan sebelum ini semasa memperkenalkan modul acara, semua strim ialah tika EventEmitter. Jadi data diperoleh dengan mendengar acara 'data':

readableStream.on('data', data => {
  console.log(data)
  console.log(data.toString())
})

Hasil cetakan adalah seperti berikut. Lalai ialah objek Penimbal, yang boleh ditukar kepada rentetan. melalui kaedah toString():

Artikel untuk bercakap tentang strim dalam Node

Perhatikan bahawa apabila membaca data, maksimum 64 * 1024 bait boleh dibaca pada satu masa Jika anda ingin menukar nilai ini, anda boleh menukarnya melalui pilihan highWaterMark. Selain itu, anda juga boleh menggunakan pause() untuk menjeda dan menggunakan resume() untuk meneruskan bacaan:

const readableStream = fs.createReadStream('./test.txt', {
  start: 6,
  end: 11,
  highWaterMark: 2 // 默认为 64 * 1024
})

readableStream.on('data', data => {
  console.log(data)
  console.log(data.toString())
  readableStream.pause() // 暂停读取
  setTimeout(() => {
    readableStream.resume() // 恢复读取
  }, 2000)
})

Hasil pelaksanaan adalah seperti berikut:

Artikel untuk bercakap tentang strim dalam Node

Selain 'data' Acara, strim boleh dibaca dan acara lain, seperti mendengar fail dibuka 'open' (panggilan balik akan dihantar dalam parameter fd), mendengar fail dibaca end (lalai membaca hingga akhir), 'end' yang memantau penutupan fail (fail akan ditutup secara automatik selepas membaca): 'close'

readableStream.on('data', data => console.log(data))
readableStream.on('open', fd => console.log(`${fd}文件打开了`))
readableStream.on('end', () => console.log('文件读取到 end 位置了'))
readableStream.on('close', () => console.log('文件已关闭'))
Hasil cetakan adalah seperti berikut:

Artikel untuk bercakap tentang strim dalam Node

Boleh Ditulis

Gunakan

untuk mencipta strim boleh tulis Parameter pertama dihantar dalam fail yang akan ditulis, dan parameter kedua ialah juga digunakan untuk Parameter pilihan konfigurasi, di sini kita menukar fs.createWriteStream() daripada flags menunjukkan tulisan ganti kepada 'w', iaitu, tambah tulisan (jika kedudukan permulaan tulisan 'a' juga ditentukan, agar serasi dengan Sistem windows, start hendaklah ditulis sebagai flags): 'r+'

const writableStream = fs.createWriteStream('test.txt', {
  flags: 'a'
})

writableStream.write('养成', err => console.log(`错误信息:${err}`)) // 错误信息:undefined
writableStream.write('写作的')
writableStream.end('好习惯')
menulis data melalui kaedah

Hasil daripada melaksanakan kod di atas ialah menambah "naikkan" selepas yang asal "hello juejin" Kembangkan tabiat menulis yang baik." Tulisan terakhir boleh menggunakan kaedah write, supaya acara end strim boleh tulis boleh dipantau: 'close'

writableStream.on('close', () => {
  console.log('关闭')
})
Jika tidak, strim boleh tulis perlu ditutup secara manual

untuk memantau writableStream.close() Acara. Jika penulisan berjaya, 'close' panggilan balik yang dihantar sebagai parameter kedua write()/end() ialah err. Strim boleh dibaca undefined

juga mempunyai acara lain, seperti acara

apabila fail dibuka dan acara 'open' apabila penulisan fail selesai selepas close() atau end() dipanggil. 'finish'

Sambungan strim boleh dibaca dan boleh ditulis

Strim boleh dibaca dan boleh ditulis boleh disambungkan melalui kaedah

untuk menyalin fail: pipe

const readableStream = fs.createReadStream('./test.txt')
const writableStream = fs.createWriteStream('./copy.txt')

readableStream.pipe(writableStream)
Dengan cara ini, teks dalam ./test.txt boleh disalin ke ./copy.txt.

Untuk lebih banyak pengetahuan berkaitan nod, sila lawati:

tutorial nodejs!

Atas ialah kandungan terperinci Artikel untuk bercakap tentang strim dalam Node. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam