Analisis mendalam aliran fail dalam node.js

青灯夜游
Lepaskan: 2021-11-23 17:58:20
ke hadapan
2252 orang telah melayarinya

Artikel ini akan menganalisis aliran fail dalam Nodejs Saya harap ia akan membantu anda!

Analisis mendalam aliran fail dalam node.js

Strim Fail

Disebabkan oleh kelajuan bacaan dan storan yang berbeza serta kapasiti berbeza pelbagai media dalam komputer, salah satu daripadanya mungkin wujud untuk jangka masa yang lama semasa operasi, terdapat tiga jenis status menunggu utama

strim fail, iaitu Strim Input (Boleh Dibaca) , Strim Keluaran (Boleh Tulis) , Dupleks strim (Dupleks) . Terdapat satu lagi jenis strim yang tidak biasa digunakan, iaitu, 转换流(Transform)

menyediakan modul strim dalam nod Terdapat dua kejadian kelas dalam modul ini: Boleh Dibaca dan Boleh Ditulis, yang akan diwarisi oleh dua kelas, jadi akan ada banyak kaedah biasa, dsb.

Strim boleh dibaca (Boleh dibaca)

Strim input: Data mengalir dari sumber ke memori, memindahkan data dari cakera ke memori.

createReadStream

fs.createReadStream(路径, 配置)

Dalam konfigurasi terdapat: pengekodan (kaedah pengekodan), mula (mula membaca bait), tamat (akhir bacaan bait) ), highWaterMark (setiap jumlah yang dibaca)

highWaterMark: Jika pengekodan mempunyai nilai, nombor itu mewakili bilangan aksara; ReadStream

const readable = fs.createReadStream(nama fail, { pengekodan: 'utf-8', mula: 1, tamat: 2, // highWaterMark: });

Daftar acara

readable.on (nama acara, fungsi pengendali)

readable.on('open', (err, data)=> {
    // console.log(err);
    console.log('文件打开了');
})

readable.on('error', (data, err) => {
    console.log(data, err);
    console.log('读取文件发生错误');
})

readable.on('close', (data, err) => {
    // console.log(data, err);
    console.log('文件关闭');
})

readable.close() // 手动触发通过 readable.close()或者在文件读取完毕之后自动关闭--autoClose配置项默认为 true

readable.on('data', (data) => {
    console.log(data);
    console.log('文件正在读取');
})

readable.on('end', ()=>{
    console.log('文件读取完毕');
})
Salin selepas log masuk
Jeda bacaan Ambil

readable.pause() untuk menjeda bacaan, yang akan mencetuskan acara jeda

untuk menyambung semula bacaan

readable.resume( ) untuk menyambung semula Pembacaan akan mencetuskan acara resume

Strim boleh tulis

const ws = fs.createWriteStream(nama fail[, konfigurasi])

ws.write(data)

Tulis data, data boleh menjadi rentetan atau Penampan dan mengembalikan nilai Boolean.

Jika benar dikembalikan, ini bermakna saluran tulis tidak penuh, dan data seterusnya boleh ditulis terus Saluran tulis ialah saiz yang diwakili oleh highWaterMark dalam konfigurasi.

Jika palsu dikembalikan, ini bermakna saluran penulisan penuh, dan aksara yang tinggal mula menunggu, menyebabkan tekanan belakang.

Gunakan strim untuk menyalin dan menampal fail dan menyelesaikan masalah tekanan belakang
const ws = fs.createWriteStream(filename, {
    encoding: 'utf-8',
    highWaterMark: 2
})

const flag = ws.write('刘');
console.log(flag); // false 
这里虽然只会执行一次,但是在通道有空余空间的时候就会继续写入,并不在返回 值。

ws.write() 只会返回一次值。


const flag = ws.write('a');
console.log(flag);
const flag1 = ws.write('a');
console.log(flag1);
const flag2 = ws.write('a');
console.log(flag2);
const flag3 = ws.write('a');
console.log(flag3);

输出顺序:true、false、false、false

第二次写入的时候已经占了两字节,第三次写入后直接占满了,所以返回false
Salin selepas log masuk

const filename = path.resolve(__dirname, './file/write.txt');
const wsfilename = path.resolve(__dirname, './file/writecopy.txt');

const ws = fs.createWriteStream(wsfilename);
const rs = fs.createReadStream(filename)

rs.on('data', chumk => {
    const falg = ws.write(chumk);
    if(!falg) {
        rs.pause();
    }
})

ws.on('drain', () => {
    rs.resume();
})

rs.on('close', () => {
    ws.end();
    console.log('copy end');
})
Salin selepas log masuk
paip

Gunakan paip untuk juga terus menyalin boleh dibaca fail Menyambung strim dan strim tulis secara bersiri juga boleh menyelesaikan masalah tekanan belakang

Selepas belajar, saya rasa strim fail sangat mudah apabila membaca dan menulis sejumlah besar fail, dan ia boleh dilakukan dengan cepat dan cekap Berbanding dengan Kecekapan
rs.pipe(ws);

rs.on('close', () => {
    ws.end();
    console.log('copy end');
})
Salin selepas log masuk
dan

jauh lebih tinggi, dan tidak akan ada sekatan besar jika dikendalikan dengan betul. writeFilereadFileUntuk lebih banyak pengetahuan berkaitan nod, sila lawati:

tutorial nodejs

! !

Atas ialah kandungan terperinci Analisis mendalam aliran fail dalam node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan