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
Dapat dilihat daripada contoh ini bahawa aksara yang berbeza menduduki bait yang berbeza dalam Pengekodan Di bawah UTF-8, aksara Cina menduduki 3 bait dan simbol bahasa Inggeris dan separuh lebar menduduki 1 bait ? Apakah yang akan berlaku jika elemen input ialah nombor perpuluhan/negatif/melebihi 255?
Untuk situasi di atas, pemprosesan Penampan ialah:
Jika nilai yang diberikan kepada elemen kurang daripada 0, nilai akan diberikan satu persatu Tambah 256 sehingga anda mendapat integer antara 0 dan 255Sebenarnya, 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
Buat Buffer terus berdasarkan kandunganBuffer.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
Jika objek yang diperuntukkan kurang daripada 8KB, Node akan memperuntukkannya sebagai objek kecilPenimbal 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
Peruntukkan objek besarJika terdapat penimbal melebihi 8KB, anda akan pergi terus ke fungsi creatUnsafeBuffer dan memperuntukkan unit papak ini akan diduduki secara eksklusif oleh objek Penampan besar inimekanisme peruntukan peruntukan adalah seperti yang ditunjukkan dalam rajahMekanisme 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 bersamaan dengan
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!