Pengenalan terperinci kepada modul penimbalan dan penstriman dalam Node.js_node.js

WBOY
Lepaskan: 2016-05-16 16:14:34
asal
891 orang telah melayarinya

Modul penimbal

js pada asalnya direka untuk penyemak imbas, jadi ia boleh mengendalikan rentetan yang dikodkan unikod dengan baik, tetapi ia tidak dapat mengendalikan data binari dengan baik. Ini adalah masalah dengan Node.js kerana Node.js direka untuk menghantar dan menerima data melalui rangkaian, selalunya dalam format binari. Contohnya:

- Hantar dan terima data melalui sambungan TCP; - Baca data binari daripada imej atau fail dimampatkan; - Baca dan tulis data daripada sistem fail
- Proses strim data binari daripada rangkaian

Modul Penampan membawa kaedah menyimpan data mentah ke Node.js, jadi data binari boleh digunakan dalam konteks js. Setiap kali anda perlu mengendalikan data yang dialihkan dalam operasi I/O dalam Node.js, adalah mungkin untuk menggunakan modul Penampan.

Kelas: Penampan

Kelas Penampan ialah jenis pembolehubah global yang digunakan untuk memproses data binari secara terus. Ia boleh dibina dalam pelbagai cara.

Data asal disimpan dalam contoh kelas Penampan. Contoh Penampan adalah serupa dengan tatasusunan integer

1.Penimbal(saiz) baharu: Peruntukkan penimbal baharu yang bersaiz 8-bit bait

2.new Buffer(array): Peruntukkan penimbal baharu menggunakan tatasusunan bait 8-bit

3.Penimbal baharu(str, [pengekodan]):pengekodan Jenis rentetan - kaedah pengekodan yang hendak digunakan, parameternya adalah pilihan.

4. Kaedah kelas: Buffer.isEncoding(encoding): Jika pengekodan yang diberikan adalah sah, kembalikan benar, jika tidak, kembalikan palsu.

5. Kaedah kelas: Buffer.isBuffer(obj): Uji sama ada obj ini ialah Buffer Return Boolean

6. Kaedah kelas: Buffer.concat(senarai, [totalLength]): senarai {Array} jenis tatasusunan, Tatasusunan Penampan, digunakan untuk disambungkan. totalLength {Number} type Jumlah saiz semua Penampan dalam tatasusunan Penampan di atas.
Selain membaca fail untuk mendapatkan contoh Penampan, ia juga boleh dibina secara langsung, contohnya:


var bin = Penampan baharu([ 0x48, 0x65, 0x6c, 0x6c, 0x6c ]);


Penimbal adalah serupa dengan rentetan Selain menggunakan atribut .length untuk mendapatkan panjang bait, anda juga boleh menggunakan kaedah [indeks] untuk membaca bait pada kedudukan yang ditentukan, contohnya:


bin[0]; // => 0x48;


Penampan dan rentetan boleh ditukar kepada satu sama lain Sebagai contoh, data binari boleh ditukar kepada rentetan menggunakan pengekodan yang ditentukan:


var str = bin.toString('utf-8'); // => "hello"


Kaedah .slice tidak mengembalikan Penampan baharu, tetapi lebih seperti mengembalikan penuding ke kedudukan di tengah Penampan asal, seperti yang ditunjukkan di bawah.


1.[ 0x48, 0x65, 0x6c, 0x6c, 0x6c ]
2. ^^ ^
3. |.
4. bin bin.slice(2)


Tulis penimbal


var buffer = new Buffer(8);//Buat buffer yang diperuntukkan 8 bait memori
console.log(buffer.write('a','utf8'));//Output 1


Ini akan menulis aksara "a" ke dalam penimbal, dan nod mengembalikan bilangan bait yang ditulis kepada penimbal selepas pengekodan UTF-8 bagi huruf a di sini menduduki 1 bait.

Salin penimbal

Node.js menyediakan kaedah untuk menyalin keseluruhan kandungan objek Buffer ke objek Buffer yang lain. Kami hanya boleh menyalin antara objek Penampan sedia ada, jadi ia mesti dibuat.


buffer.copy(bufferToCopyTo)


Antaranya, bufferToCopyTo ialah objek Buffer sasaran untuk disalin. Contoh di bawah:


Salin kod Kod adalah seperti berikut:

var buffer1 = new Buffer(8);
buffer1.write('selamat berkenalan dengan anda','utf8');
var buffer2 = new Buffer(8);
buffer1.copy(buffer2);
console.log(buffer2.toString());//selamat bertemu dengan anda

Modul strim

Dalam sistem pengendalian jenis UNIX, strim ialah konsep standard. Terdapat tiga aliran utama seperti berikut:

1.Input standard
2. Output standard
3. Ralat piawai

Strim boleh dibaca

Jika penimbal ialah cara Node.js mengendalikan data mentah, maka strim biasanya ialah cara Node.js mengalihkan data. Strim dalam Node.js sama ada boleh dibaca atau ditulis. Banyak modul dalam Node.js menggunakan strim, termasuk HTTP dan sistem fail.

Andaikan kami mencipta fail classesmates.txt dan membaca senarai nama daripadanya untuk menggunakan data ini. Memandangkan data ialah strim, ini bermakna anda boleh bertindak pada data bermula dari beberapa bait pertama sebelum anda selesai membaca fail Ini adalah corak biasa dalam Node.js:

Salin kod Kod adalah seperti berikut:

var fs = memerlukan('fs');
var stream = fs.ReadStream('classmates.txt');
stream.setEncoding('utf8');
stream.on('data', fungsi (chunk) {
console.log('baca beberapa data')
});
stream.on('close', function () {
console.log('semua data dibaca')
});

Dalam contoh di atas, data peristiwa dicetuskan apabila data baharu diterima. Acara tutup dicetuskan apabila pembacaan fail selesai.

Strim boleh tulis

Jelas sekali, kami juga boleh mencipta strim boleh tulis untuk menulis data. Ini bermakna dengan skrip ringkas, anda boleh menggunakan strim untuk membaca ke dalam fail dan kemudian menulis ke fail lain:

Salin kod Kod adalah seperti berikut:

var fs = memerlukan('fs');
var readableStream = fs.ReadStream('classmates.txt');
var writableStream = fs.writeStream('nama.txt');
readableStream.setEncoding('utf8');
readableStream.on('data', fungsi (chunk) {
writeableStream.write(chunk);
});
readableStream.on('tutup', fungsi () {
writeableStream.end();
});

Apabila peristiwa data diterima, data kini ditulis ke strim boleh tulis.

readable.setEncoding(encoding): return: this

readable.resume(): Sama seperti di atas. Kaedah ini membenarkan strim yang boleh dibaca untuk terus menembak peristiwa data.

readable.pause(): Sama seperti di atas. Kaedah ini menyebabkan strim dalam mod aliran berhenti menembak peristiwa data, bertukar kepada mod tidak mengalir dan meninggalkan data yang tersedia seterusnya dalam penimbal dalaman.
Kelas: strim.Boleh Ditulis

Antara muka strim Boleh Tulis ialah abstraksi data yang anda tulis kepada sasaran.

1.writable.write(chunk, [encoding], [callback]):

ketulan {String |. Buffer} Data untuk ditulis
pengekodan {String} pengekodan, jika potongan ialah rentetan
panggil balik {Function} panggil balik selepas blok data ditulis
Pengembalian: {Boolean} benar jika data telah diproses sepenuhnya.

Kaedah ini menulis data ke sistem asas dan memanggil panggilan balik yang diberikan selepas data diproses.

2.writable.cork(): Paksa semua tulisan kekal.

Data yang disimpan akan ditulis apabila .uncork() atau .end() dipanggil.

3.writable.end([chunk], [encoding], [callback])

potongan {String |. Buffer} pilihan, data untuk ditulis
pengekodan {String} pengekodan, jika potongan ialah rentetan
panggilan balik {Fungsi} pilihan, panggil balik selepas strim tamat
Memanggil write() selepas memanggil end() akan menghasilkan ralat.

Salin kod Kod adalah seperti berikut:

// Tulis 'hello, ' dan akhiri dengan 'world!'
http.createServer(fungsi (req, res) {
res.write('hello, ');
res.end('dunia!');
// Tiada penulisan lanjut dibenarkan sekarang
});
Label berkaitan:
sumber:php.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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!