Di penghujung bab Strim, kita ditinggalkan dengan soalan, apakah keluaran ketulan oleh kod berikut?
Dengan mencetak, kita dapati bongkah ialah objek Penampan, unsur-unsurnya ialah nombor dua digit heksadesimal, iaitu nilai dari 0 hingga 255. [Tutorial berkaitan yang disyorkan: tutorial video nodejs, Pengajaran pengaturcaraan]
Ini bermakna data yang mengalir dalam Strim ialah Penampan, kemudian Mari terokai wajah sebenar Penampan!
? Mengapa Penimbal diperkenalkan dalam Node?
Pada mulanya, JS hanya dijalankan pada rentetan yang dikodkan Unikod adalah mudah untuk diproses, tetapi untuk binari Kesukaran mengendalikan rentetan dengan pengekodan bukan Unikod. Dan binari ialah format data peringkat terendah komputer Video/audio/program/paket rangkaian semuanya disimpan dalam binari. Jadi Node perlu memperkenalkan objek untuk mengendalikan binari, jadi Buffer dilahirkan, yang digunakan untuk sistem aliran/fail TCP dan operasi lain untuk memproses bait binari.
Memandangkan Buffer terlalu biasa digunakan dalam Node, Buffer telah diperkenalkan apabila Node bermula, tanpa menggunakan require()
ArrayBuffer ialah sekeping data binari dalam ingatan Ia tidak boleh mengendalikan memori itu sendiri. Ia perlu dikendalikan melalui objek TypeArray atau DataView. Wakilkan data dalam penimbal ke dalam format tertentu, dan baca serta tulis kandungan penimbal melalui format ini Ia menggunakan antara muka tatasusunan dan boleh menggunakan tatasusunan untuk mengendalikan data
Untuk situasi di atas, pemprosesan Penampan ialah:
Sebenarnya, nombor binari masih disimpan dalam memori, tetapi Penimbal memaparkan memori ini Data menggunakan penimbal
heksadesimal dengan saiz 2 bait, dengan jumlah 16 bit, seperti
untuk memaparkannya secara langsung, tukarkannya kepada heksadesimal 00000001 00100011
<buffer></buffer>
Penciptaan Penampan
Alokasikan Penampan bait saiz, allocUnsafe dilaksanakan lebih cepat daripada alloc , kami mendapati bahawa keputusan tidak dimulakan kepada 00 seperti Buffer.alloc Segmen memori yang diperuntukkan mungkin mengandungi data lama. Jika anda tidak menulis ganti data lama ini semasa digunakan, ia boleh menyebabkan kebocoran memori Walaupun ia pantas, cuba elakkan daripada menggunakannya Modul Penampan akan memperuntukkan contoh Buffer dalaman dengan saiz Buffer.poolSize sebagai peruntukan cepat. . Kumpulan memori, digunakan untuk mencipta kejadian Buffer baharu menggunakan allocUnsafe
Buffer.from
Buffer.from(string [, pengekodan] )
Buffer.from(buffer)
Gunakan Buffer.alloc(saiz). untuk lulus dalam Saiz yang ditentukan akan digunakan untuk kawasan memori saiz tetap Papak mempunyai tiga keadaan berikut:
separa: keadaan diperuntukkan separa.
kosong: Tiada status diperuntukkan
Peruntukkan objek kecil
Penimbal digunakan terutamanya dalam proses peruntukan. Kolam pembolehubah tempatan berfungsi sebagai objek pemprosesan perantaraan, dan semua unit papak dalam keadaan yang diperuntukkan menghala kepadanya. Berikut ialah operasi memperuntukkan unit papak serba baharu, yang akan menghalakan objek SlowBuffer yang baru digunakan kepadanya
unit papak
Peruntukkan Penampan 2KB
Selepas mencipta penimbal 2KB, memori unit papak adalah seperti berikut:
Selepas kami mencipta penimbal 2KB, status papak semasa adalah separa
Apabila kami mencipta penimbal semula, kami akan menilai semasa baki papak Adakah terdapat cukup ruang? Jika sudah mencukupi, gunakan ruang yang tinggal dan kemas kini status peruntukan papak
Jika ruang papak tidak mencukupi, papak baru akan dibina, dan ruang yang tinggal dalam papak asal akan terbuang
Mekanisme peruntukan memori Penampan
Pengekodan penampan dan aksara
Node kini menyokong lapan kaedah pengekodan: utf8, ucs2, utf16le, latin1, ascii, base64, hex dan base64Url Pelaksanaan terperinci
. Untuk setiap skim pengekodan yang berbeza, satu siri API akan dilaksanakan dan hasil yang berbeza akan dikembalikan Node.js akan mengembalikan objek yang berbeza mengikut pengekodan masuk
terutamanya melalui kaedah Buffer.from yang dinyatakan di atas Kaedah pengekodan lalai ialah utf-8
? Mengapakah watak bercelaru muncul? Bagaimana untuk menyelesaikan masalah ini?Dari segi bacaan, panjang setiap bacaan ialah 4, dan keluaran ketulan adalah seperti berikut
Dalam data += chunk
data = data.toString + chunk.toString
tutorial nodejs!
Atas ialah kandungan terperinci Ketahui lebih lanjut tentang Penampan dalam Node. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!