Rumah hujung hadapan web tutorial js Penjelasan terperinci tentang modul Penampan dalam NodeJS_node.js

Penjelasan terperinci tentang modul Penampan dalam NodeJS_node.js

May 16, 2016 pm 04:21 PM
nodejs

1, analisis pembukaan

Penampan penimbal yang dipanggil bermaksud "kawasan storan sementara", iaitu bahagian memori yang menyimpan data input dan output buat sementara waktu.

Bahasa JS itu sendiri hanya mempunyai jenis data rentetan dan tiada jenis data binari, jadi NodeJS menyediakan Penimbal pembina global bersamaan dengan String untuk menyediakan operasi pada data binari. Selain membaca fail untuk mendapatkan contoh Penampan, ia juga boleh dibina secara langsung, contohnya:

Salin kod Kod adalah seperti berikut:

var penimbal = Penampan baharu([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]) ;
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:

Salin kod Kod adalah seperti berikut:
penimbal[0] ; // 0x68;

Penimbal dan rentetan boleh ditukar kepada satu sama lain Contohnya, data binari boleh ditukar kepada rentetan menggunakan pengekodan yang ditentukan:

Salin kod Kod adalah seperti berikut:
var str = buffer.toString("utf-8"); // hello

Tukar rentetan kepada data binari dalam pengekodan yang ditentukan:

Salin kod Kod adalah seperti berikut:
var buffer= new Buffer("hello", "utf-8") ; //

Sedikit perbezaan:

Terdapat perbezaan penting antara Penampan dan rentetan. Rentetan adalah baca sahaja, dan sebarang pengubahsuaian pada rentetan menghasilkan rentetan baharu, manakala rentetan asal kekal tidak berubah.

Bagi Penampan, ia lebih seperti tatasusunan bahasa C yang boleh melakukan operasi penunjuk. Sebagai contoh, anda boleh menggunakan kaedah [indeks] untuk mengubah suai bait secara langsung pada kedudukan tertentu.

------------------------------------------------ --------------------------------------------------- --------------------------------------------------- --------------------------------------------------- --- --------------------------------

Kaedah

slice tidak mengembalikan Penampan baharu, sebaliknya mengembalikan penuding ke kedudukan di tengah Penampan asal, seperti ditunjukkan di bawah.

[ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]

                                                             |
bin bin.slice(2)
Oleh itu, pengubahsuaian kepada Penampan yang dikembalikan melalui kaedah hirisan akan menjejaskan Penampan asal, contohnya:

var buffer= Penampan baharu([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]) ;
var sub = bin.slice(2) ;
sub[0] = 0x65;
console.log(buffer); //


Jika anda ingin menyalin Penampan, anda mesti membuat Penampan baharu dahulu dan menyalin data dalam Penampan asal melalui kaedah .copy.

Ini sama seperti memohon memori baharu dan menyalin data dalam memori sedia ada. Di bawah adalah contoh.

var buffer= Penampan baharu([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]) ;
var dup = Penampan baharu(bin.length) ;
buffer.copy(dup) ;
dup[0] = 0x48 ;
console.log(buffer); //
console.log(dup) ; //

Ringkasnya, Penampan memanjangkan keupayaan pemprosesan data JS daripada rentetan kepada data binari arbitrari.

Di atas ialah pengenalan ringkas tentang apa itu Penampan Mari kita bincangkan tentang cara menggunakannya dan senario penggunaan khusus.

Dua, mari bercakap tentang Penampan

JavaScript sangat mesra pemprosesan rentetan sama ada bait lebar atau rentetan bait tunggal, ia dianggap sebagai rentetan. Node perlu memproses protokol rangkaian, mengendalikan pangkalan data, memproses gambar, muat naik fail, dsb. Ia juga perlu memproses sejumlah besar data binari Rentetan terbina dalam jauh daripada memenuhi keperluan ini, jadi Penimbal wujud.

Struktur penimbal

Penimbal ialah modul biasa yang menggabungkan Javascript dan C. Bahagian berkaitan prestasi dilaksanakan dalam C, dan bahagian bukan berkaitan prestasi dilaksanakan dalam JavaScript.

Node telah pun memuatkan Penampan ke dalam memori apabila proses bermula dan meletakkannya ke dalam objek global, jadi tidak perlu memerlukan

Objek penimbal: serupa dengan tatasusunan, elemennya ialah dua digit digit perenambelasan.

Peruntukan memori penimbal

Peruntukan memori objek Penampan tidak berada dalam memori timbunan V8 Aplikasi memori dilaksanakan pada tahap C Node.

Untuk menggunakan memori yang diminta dengan cekap, Node menggunakan mekanisme peruntukan papak ialah mekanisme pengurusan memori dinamik yang menggunakan pelbagai sistem pengendalian *nix. Papak mempunyai tiga keadaan:

(1) penuh: status diperuntukkan sepenuhnya

(2) separa: status peruntukan separa

(3) kosong: tiada status diberikan

Penukaran penimbal

Objek penimbal boleh ditukar kepada dan daripada rentetan Jenis pengekodan yang disokong adalah seperti berikut:

ASCII, UTF-8, UTF-16LE/UCS-2, Base64, Binary, Hex

Rentetan untuk Penampan

Penimbal baharu(str, [pengekodan]), lalai UTF-8
buf.write(rentetan, [offset], [panjang], [pengekodan])

Penimbal kepada rentetan

buf.toString([pengekodan], [mula], [tamat])

Jenis pengekodan tidak disokong oleh Penampan

Tentukan sama ada ia disokong oleh Buffer.isEncoding(encoding)

iconv-lite: Pelaksanaan JavaScript tulen, berat lebih ringan, prestasi lebih baik tanpa penukaran C kepada javascript

iconv: Panggil pustaka libiconv C untuk melengkapkan

Penyambungan penimbal

Beri perhatian kepada "res.on('data', function(chunk) {})". boleh dijana ,

Penyelesaian:

(1) Melalui kaedah setEncoding() dalam strim boleh dibaca, kaedah ini membenarkan peristiwa data dihantar bukan lagi sebagai objek Penampan, tetapi sebagai rentetan yang dikodkan, yang menggunakan modul StringEncoder secara dalaman.

(2) Simpan objek Penampan ke dalam tatasusunan buat sementara waktu, dan akhirnya pasangkannya ke dalam Penampan yang besar dan kemudian kodkannya ke dalam rentetan untuk output.

Penimbal digunakan secara meluas dalam fail I/O dan rangkaian I/O Prestasinya sangat penting, dan prestasinya jauh lebih tinggi daripada rentetan biasa.

Selain kehilangan prestasi dalam menukar rentetan, penggunaan Buffer mempunyai tetapan highWaterMark yang penting untuk prestasi semasa membaca fail.

a. Tetapan highWaterMark mempunyai kesan tertentu pada peruntukan dan penggunaan memori Penampan.

b. Menetapkan highWaterMark terlalu kecil boleh mengakibatkan terlalu banyak panggilan sistem.

Bila hendak menggunakan penimbal dan bila tidak menggunakannya ------ Javascript tulen menyokong kod unicode tetapi bukan binari Apabila berurusan dengan strim TCP atau strim fail, adalah perlu untuk memproses strim tersebut. utf-8, binari dan format lain, kita mesti menggunakan "Buffer".

3. Pengenalan contoh

Salin kod Kod adalah seperti berikut:

var buf = new Buffer("ini adalah ujian concat teks !") ,str = "ini ialah ujian concat teks ;
console.time("buffer concat test !");
senarai var = [] ;
var len = 100000 * buf.length ;
untuk(var i=0;i<100000;i ){
List.push(buf) ;
len = buf.length ;
}
var s1 = Buffer.concat(senarai, len).toString() ;
console.timeEnd("buffer concat test !") ;
console.time("string concat test !") ;
senarai var = [] ;
untuk (var i = 100000; i >= 0; i--) {
List.push(str) ;
}
var s2 = list.join("") ;
console.timeEnd("string concat test !") ;

Berikut ialah keputusannya:

Kelajuan membaca rentetan pasti lebih pantas, dan penimbal juga memerlukan operasi toString(). Oleh itu, apabila kita menyimpan rentetan, kita harus menggunakan rentetan atau rentetan Walaupun rentetan besar disambungkan ke dalam rentetan, kelajuan penyambungannya tidak akan lebih perlahan daripada penampan.

Jadi bila kita perlu menggunakan penimbal lagi? Apabila tidak ada cara lain, apabila kita menyimpan rentetan bukan utf-8, binari dan format lain, kita mesti menggunakannya.

Empat, ringkasan

(1), JavaScript sesuai untuk memproses data yang dikodkan Unicode, tetapi ia tidak mesra pemprosesan data binari.
(2), jadi apabila memproses aliran TCP atau sistem fail, adalah perlu untuk memproses aliran oktet.
(3), Node mempunyai beberapa kaedah untuk memproses, mencipta dan menggunakan aliran oktet.
(4) Data asal disimpan dalam contoh Penampan A adalah serupa dengan tatasusunan integer, tetapi memorinya diperuntukkan di luar tindanan V8. Saiz Penampan tidak boleh diubah.
(5), jenis pengekodan yang diproses ialah: ascii, utf8, utf16le, ucs2 (alias utf16le), base64, binari, hex.
(6), Penampan ialah elemen global, dan anda boleh mendapatkan contoh Penampan secara langsung dengan menggunakan Penampan baharu().

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

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)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Muzium Dua Point: Semua Pameran dan Di Mana Mencari Mereka
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Perbezaan antara nodejs dan tomcat Perbezaan antara nodejs dan tomcat Apr 21, 2024 am 04:16 AM

Perbezaan utama antara Node.js dan Tomcat ialah: Runtime: Node.js adalah berdasarkan masa jalan JavaScript, manakala Tomcat ialah bekas Java Servlet. Model I/O: Node.js menggunakan model tidak menyekat tak segerak, manakala Tomcat menyekat segerak. Pengendalian konkurensi: Node.js mengendalikan konkurensi melalui gelung peristiwa, manakala Tomcat menggunakan kumpulan benang. Senario aplikasi: Node.js sesuai untuk aplikasi masa nyata, intensif data dan konkurensi tinggi, dan Tomcat sesuai untuk aplikasi web Java tradisional.

Perbezaan antara nodejs dan vuejs Perbezaan antara nodejs dan vuejs Apr 21, 2024 am 04:17 AM

Node.js ialah masa jalan JavaScript bahagian pelayan, manakala Vue.js ialah rangka kerja JavaScript sisi klien untuk mencipta antara muka pengguna interaktif. Node.js digunakan untuk pembangunan bahagian pelayan, seperti pembangunan API perkhidmatan belakang dan pemprosesan data, manakala Vue.js digunakan untuk pembangunan sisi klien, seperti aplikasi satu halaman dan antara muka pengguna yang responsif.

Adakah nodejs rangka kerja bahagian belakang? Adakah nodejs rangka kerja bahagian belakang? Apr 21, 2024 am 05:09 AM

Node.js boleh digunakan sebagai rangka kerja bahagian belakang kerana ia menawarkan ciri seperti prestasi tinggi, kebolehskalaan, sokongan merentas platform, ekosistem yang kaya dan kemudahan pembangunan.

Apakah perbezaan antara fail npm dan npm.cmd dalam direktori pemasangan nodejs? Apakah perbezaan antara fail npm dan npm.cmd dalam direktori pemasangan nodejs? Apr 21, 2024 am 05:18 AM

Terdapat dua fail berkaitan npm dalam direktori pemasangan Node.js: npm dan npm.cmd Perbezaannya adalah seperti berikut: sambungan berbeza: npm ialah fail boleh laku dan npm.cmd ialah pintasan tetingkap arahan. Pengguna Windows: npm.cmd boleh digunakan daripada command prompt, npm hanya boleh dijalankan dari baris arahan. Keserasian: npm.cmd adalah khusus untuk sistem Windows, npm tersedia merentas platform. Cadangan penggunaan: Pengguna Windows menggunakan npm.cmd, sistem pengendalian lain menggunakan npm.

Adakah nodejs bahasa pembangunan bahagian belakang? Adakah nodejs bahasa pembangunan bahagian belakang? Apr 21, 2024 am 05:09 AM

Ya, Node.js ialah bahasa pembangunan bahagian belakang. Ia digunakan untuk pembangunan bahagian belakang, termasuk mengendalikan logik perniagaan sebelah pelayan, mengurus sambungan pangkalan data dan menyediakan API.

Apakah pembolehubah global dalam nodejs Apakah pembolehubah global dalam nodejs Apr 21, 2024 am 04:54 AM

Pembolehubah global berikut wujud dalam Node.js: Objek global: modul Teras global: proses, konsol, memerlukan pembolehubah persekitaran Runtime: __dirname, __filename, __line, __column Constants: undefined, null, NaN, Infinity, -Infinity

Bagaimana untuk menyambungkan nodejs ke pangkalan data mysql Bagaimana untuk menyambungkan nodejs ke pangkalan data mysql Apr 21, 2024 am 06:13 AM

Untuk menyambung ke pangkalan data MySQL, anda perlu mengikuti langkah berikut: Pasang pemacu mysql2. Gunakan mysql2.createConnection() untuk mencipta objek sambungan yang mengandungi alamat hos, port, nama pengguna, kata laluan dan nama pangkalan data. Gunakan connection.query() untuk melaksanakan pertanyaan. Akhir sekali gunakan connection.end() untuk menamatkan sambungan.

Mana satu untuk dipilih antara nodejs dan java? Mana satu untuk dipilih antara nodejs dan java? Apr 21, 2024 am 04:40 AM

Node.js dan Java masing-masing mempunyai kebaikan dan keburukan dalam pembangunan web, dan pilihan bergantung pada keperluan projek. Node.js cemerlang dalam aplikasi masa nyata, pembangunan pesat dan seni bina perkhidmatan mikro, manakala Java cemerlang dalam sokongan, prestasi dan keselamatan gred perusahaan.

See all articles