cari
Rumahhujung hadapan webtutorial jsKetahui lebih lanjut tentang Penampan dalam Node

Ketahui lebih lanjut tentang Penampan dalam Node

Apr 25, 2023 pm 07:49 PM
hujung hadapannode.js

Ketahui lebih lanjut tentang Penampan dalam Node

Di penghujung bab Strim, kita ditinggalkan dengan soalan, apakah keluaran ketulan oleh kod berikut?

Ketahui lebih lanjut tentang Penampan dalam Node

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]

Untitled 1.png

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()

Apakah itu ArrayBuffer

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

paparan TypedArray

Paling biasa digunakan ialah paparan TypeArray, yang digunakan untuk membaca dan menulis jenis ArrayBuffer yang ringkas, seperti paparan tatasusunan Uint8Array (integer 8-bit tidak ditandatangani), paparan tatasusunan Int16Array (integer 16-bit)

Hubungan dengan Penampan

Kelas Penampan dalam NodeJS sebenarnya adalah pelaksanaan Uint8Array.

Struktur penampan

Penimbal ialah objek seperti Array, tetapi ia digunakan terutamanya untuk mengendalikan bait

Struktur modul

Penimbal ialah gabungan JS dan C++ Modul, bahagian prestasi semuanya dilaksanakan dalam C++, dan bahagian bukan prestasi semuanya dilaksanakan dalam JS

Untitled 2.png

Memori yang diduduki oleh Penampan tidak diperuntukkan oleh V8 dan tergolong dalam timbunan luar ingatan.

Struktur objek

Objek penimbal adalah serupa dengan tatasusunan, elemennya ialah nombor dua digit perenambelasan, iaitu nilai dari 0 hingga 255

Untitled 3.png

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?

Untitled 4.pngUntuk 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 255
  • Jika nilai lebih besar daripada 255, tolak 256 satu demi satu sehingga anda mendapat nilai antara 0 dan 255
  • Jika ia perpuluhan, Hanya bahagian integer dikekalkan
Mengapa Penimbal memaparkan heksadesimal

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

Penimbal.alloc dan Penampan.allocUnsafe

Penciptaan penimbal saiz tetap

Buffer.alloc(size [, fill [, encoding]])

  • size Panjang penimbal baharu yang diingini
  • isi Nilai yang digunakan untuk praisi Penimbal baharu. Lalai: 0
  • pengekodan Jika isi ialah rentetan, ini ialah pengekodan aksaranya. Nilai lalai: utf8

Untitled 5.png

Buffer.allocUnsafe(size)

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.fromUntitled 6.png

Buat Buffer terus berdasarkan kandungan

Buffer.from(string [, pengekodan] )

Buffer.from(array)

Buffer.from(buffer)

  • Buffer.allocUnsafe memory mechanism
  • Untuk menggunakan memori yang digunakan dengan cekap, Node.js mengguna pakai mekanisme papak untuk pra-aplikasi dan pasca-peruntukan Ia merupakan mekanisme pengurusan dinamik

Gunakan Buffer.alloc(saiz). untuk lulus dalam Saiz yang ditentukan akan digunakan untuk kawasan memori saiz tetap Papak mempunyai tiga keadaan berikut: Untitled 7.png

penuh: keadaan diperuntukkan sepenuhnya

separa: keadaan diperuntukkan separa.

kosong: Tiada status diperuntukkan

  • Node.js menggunakan 8 KB sebagai had untuk membezakan objek kecil daripada objek besar
Penimbal Saiz ditentukan apabila dibuat dan tidak boleh dilaraskan!

Peruntukkan objek kecilUntitled 8.png

Jika objek yang diperuntukkan kurang daripada 8KB, Node akan memperuntukkannya sebagai 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

Untitled 9.pngPeruntukkan Penampan 2KB

Selepas mencipta penimbal 2KB, memori unit papak adalah seperti berikut:

Untitled 10.png

Proses peruntukan ini dilakukan dengan memperuntukkan Penyempurnaan kaedah

Untitled 11.pngSelepas 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 terbuangUntitled 12.png

Peruntukkan objek besar

Jika terdapat penimbal melebihi 8KB, anda akan pergi terus ke fungsi creatUnsafeBuffer dan memperuntukkan unit papak ini akan diduduki secara eksklusif oleh objek Penampan besar ini

mekanisme peruntukan peruntukan adalah seperti yang ditunjukkan dalam rajah

Mekanisme peruntukan memori Penampan

Untitled 13.pngPengekodan penampan dan aksara

Dengan menggunakan pengekodan aksara, Buffer tika dan Penukaran antara rentetan JavaScript

Untitled 14.png

Node kini menyokong lapan kaedah pengekodan: utf8, ucs2, utf16le, latin1, ascii, base64, hex dan base64Url Pelaksanaan terperinci

Untitled 16.png

. 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

Penimbal dan penukaran rentetan

Tukar. rentetan kepada Buffer

terutamanya melalui kaedah Buffer.from yang dinyatakan di atas Kaedah pengekodan lalai ialah utf-8

Buffer kepada rentetan

Untitled 17.png

? Mengapakah watak bercelaru muncul? Bagaimana untuk menyelesaikan masalah ini?

Dari segi bacaan, panjang setiap bacaan ialah 4, dan keluaran ketulan adalah seperti berikut

Untitled 18.png

bersamaan dengan

Dalam data += chunkdata = data.toString + chunk.toString

memandangkan satu aksara Cina menduduki tiga bait, bait keempat dalam bongkah pertama akan memaparkan aksara berantakan, dan bait pertama dan kedua bagi bongkah kedua tidak boleh membentuk teks, jadi kod bercelaru masalah akan dipaparkan

Untuk lebih banyak pengetahuan berkaitan nod, sila lawati:

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!

Kenyataan
Artikel ini dikembalikan pada:掘金社区. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Enjin JavaScript: Membandingkan PelaksanaanEnjin JavaScript: Membandingkan PelaksanaanApr 13, 2025 am 12:05 AM

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Beyond the Browser: JavaScript di dunia nyataBeyond the Browser: JavaScript di dunia nyataApr 12, 2025 am 12:06 AM

Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.

Membina aplikasi SaaS Multi-penyewa dengan Next.js (Integrasi Backend)Membina aplikasi SaaS Multi-penyewa dengan Next.js (Integrasi Backend)Apr 11, 2025 am 08:23 AM

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing

Cara Membina Aplikasi SaaS Multi-Tenant dengan Next.js (Integrasi Frontend)Cara Membina Aplikasi SaaS Multi-Tenant dengan Next.js (Integrasi Frontend)Apr 11, 2025 am 08:22 AM

Artikel ini menunjukkan integrasi frontend dengan backend yang dijamin oleh permit, membina aplikasi edtech SaaS yang berfungsi menggunakan Next.Js. Frontend mengambil kebenaran pengguna untuk mengawal penglihatan UI dan memastikan permintaan API mematuhi dasar peranan

JavaScript: meneroka serba boleh bahasa webJavaScript: meneroka serba boleh bahasa webApr 11, 2025 am 12:01 AM

JavaScript adalah bahasa utama pembangunan web moden dan digunakan secara meluas untuk kepelbagaian dan fleksibiliti. 1) Pembangunan front-end: Membina laman web dinamik dan aplikasi satu halaman melalui operasi DOM dan kerangka moden (seperti React, Vue.js, sudut). 2) Pembangunan sisi pelayan: Node.js menggunakan model I/O yang tidak menyekat untuk mengendalikan aplikasi konkurensi tinggi dan masa nyata. 3) Pembangunan aplikasi mudah alih dan desktop: Pembangunan silang platform direalisasikan melalui reaktnatif dan elektron untuk meningkatkan kecekapan pembangunan.

Evolusi JavaScript: Trend Semasa dan Prospek Masa DepanEvolusi JavaScript: Trend Semasa dan Prospek Masa DepanApr 10, 2025 am 09:33 AM

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

Demystifying JavaScript: Apa yang berlaku dan mengapa pentingDemystifying JavaScript: Apa yang berlaku dan mengapa pentingApr 09, 2025 am 12:07 AM

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Adakah Python atau JavaScript lebih baik?Adakah Python atau JavaScript lebih baik?Apr 06, 2025 am 12:14 AM

Python lebih sesuai untuk sains data dan pembelajaran mesin, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya, dan sesuai untuk analisis data dan pembangunan web. 2. JavaScript adalah teras pembangunan front-end. Node.js menyokong pengaturcaraan sisi pelayan dan sesuai untuk pembangunan stack penuh.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft