Mengkonversi aliran ke buffer nodejs

Untuk waktu yang lama, JavaScript kurang mendukung penanganan array data biner. Itu berubah dengan ECMAScript 2015, ketika array yang diketik diperkenalkan dan memungkinkan penanganan yang lebih baik dari kasus-kasus tersebut

Semua jenis ini turun dari kelas TypedArray abstrak, masing-masing mengkhususkan diri pada ukuran dan penandatanganan kata bilangan bulat tertentu, dan beberapa menyediakan dukungan floating-point. Float64Array, misalnya, mewakili larik angka floating-point 64-bit;

Dari semua tipe array, yang paling berguna mungkin adalah Uint8Array. Ini memungkinkan penanganan data biner seperti file gambar, protokol jaringan, dan streaming video dengan cara yang mirip dengan yang dilakukan dalam bahasa pemrograman lain.

Di dalam Node. js dunia, ada kelas lain, Buffer, yang diturunkan dari Uint8Array. Itu menambahkan beberapa metode utilitas seperti concat(), allocUnsafe(), dan compare(), dan metode untuk membaca dan menulis berbagai tipe numerik, meniru apa yang ditawarkan oleh kelas DataView (mis. readUint16BE, writeDoubleLE, dan swap32)

Pengodean Teks

Subjek pengkodean karakter teks menggunakan komputer sangat luas dan kompleks dan saya tidak akan mempelajarinya secara mendalam di artikel singkat ini

Secara konseptual, teks terdiri dari karakter. bagian terkecil dari konten yang bermakna - biasanya huruf, tetapi tergantung pada bahasanya mungkin ada simbol lain yang sangat berbeda. Kemudian setiap karakter diberi titik kode. nomor yang mengidentifikasinya dalam hubungan satu-ke-satu

Akhirnya, setiap titik kode dapat diwakili oleh urutan bit sesuai dengan pengkodean. Pengkodean adalah tabel yang memetakan setiap titik kode ke string bit yang sesuai

Ini mungkin terlihat seperti pemetaan sederhana, tetapi beberapa pengkodean telah dibuat dalam beberapa dekade terakhir untuk mengakomodasi banyak arsitektur komputer dan rangkaian karakter yang berbeda.  

Pengkodean yang paling luas adalah ASCII

Ini termasuk karakter Latin dasar (A-Z, huruf besar dan kecil), angka, dan banyak simbol tanda baca, selain beberapa karakter kontrol. ASCII adalah pengkodean 7-bit, tetapi komputer menyimpan data dalam blok 8-bit yang disebut byte, sehingga banyak pengkodean 8-bit dibuat, memperluas 128 karakter ASCII pertama dengan 128 karakter khusus bahasa lainnya

Pengkodean yang sangat umum adalah ISO-8859-1, juga dikenal dengan beberapa nama lain seperti "latin1", "IBM819", "CP819", dan bahkan "WE8ISO8859P1". ISO-8859-1 menambahkan beberapa simbol ekstra ke ASCII dan banyak huruf beraksen seperti Á, Ú, È, dan Õ

Pengkodean khusus bahasa tersebut bekerja dengan cukup baik untuk beberapa situasi tetapi gagal total dalam konteks multi-bahasa

Kehilangan informasi dan kerusakan data adalah hal biasa karena program mencoba memanipulasi teks menggunakan penyandian file yang salah

Bahkan menampilkan konten file pun berantakan, karena file teks tidak menyertakan nama pengkodean yang digunakan untuk menyandikan kontennya

Mencoba memperbaikinya, standar Unicode dimulai pada 1980-an. Tujuan mereka adalah memetakan setiap karakter yang saat ini digunakan dalam setiap bahasa manusia (dan beberapa skrip bersejarah) ke satu titik kode

Standar Unicode juga menentukan sejumlah pengkodean umum yang dapat mengkodekan setiap titik kode Unicode

Pengkodean paling umum untuk Unicode adalah UTF-16, UCS-2, UTF-32, dan UTF-8. Kecuali untuk UCS-2, yang menggunakan lebar tetap untuk semua titik kode (sehingga mencegahnya untuk mewakili semua karakter Unicode), semua pengkodean ini menggunakan sejumlah bit variabel untuk menyandikan setiap titik kode

Di web, penyandian Unicode yang paling banyak digunakan adalah UTF-8, karena cukup efisien untuk banyak penggunaan. Ini menggunakan 1 byte untuk karakter ASCII, dan 2 byte untuk sebagian besar skrip Eropa dan Timur Tengah - tetapi kurang efisien untuk skrip Asia, membutuhkan 3 byte atau lebih. Misalnya, pepatah Prancis "Il vaut mieux prévenir que guérir" setara dengan urutan byte berikut saat dikodekan menggunakan UTF-8 (byte ditampilkan dalam heksadesimal)

Ivautmieuxpré496c2076617574206d69657578207072c3a9venirqueguérir76656e697220717565206775c3a9726972

Mengkonversi Buffer ke String Node. js

Karena itu, konten Buffer dapat dengan cepat diubah menjadi String menggunakan

const b = Buffer.from([101, 120, 97, 109, 112, 108, 101]);
console.log(b.toString()); // example

Ingat pidato tentang pengkodean teks?

const b = Buffer.from([101, 120, 97, 109, 112, 108, 101]);
console.log(b.toString('latin1')); // example
_

Sebagian besar waktu, UTF-8 adalah pilihan terbaik untuk membaca dan menulis. Namun untuk kelengkapan, berikut adalah daftar lengkap di Node.js. js (per September/2021) - nama tidak peka huruf besar-kecil

EncodingAccepted aliasesasciibase64base64urlhexlatin1binaryucs2ucs-2utf8utf-8utf16leutf-16le

Konversi Node. js String ke Buffer

Dimungkinkan juga untuk mengonversi data ke arah yang berlawanan. Mulai dari string, Anda dapat darinya (jika penyandian tidak ditentukan, Node. js mengasumsikan UTF-8)

const s = Buffer.from('example', 'utf8');
console.log(s); // <Buffer 65 78 61 6d 70 6c 65>

Jika Anda perlu menulis teks ke objek Buffer yang ada, Anda dapat menggunakannya

const b = Buffer.alloc(10);
console.log(b);
// <Buffer 00 00 00 00 00 00 00 00 00 00>

b.write('example', 'utf8');
console.log(b);
// <Buffer 65 78 61 6d 70 6c 65 00 00 00>

Anda bahkan dapat mengatur posisi awal (offset)

const b = Buffer.alloc(10);
b.write('test', 4, 'utf8');
console.log(b);
// <Buffer 00 00 00 00 74 65 73 74 00 00>
_

Kesimpulan

Singkatnya, mudah untuk mengonversi objek Buffer menjadi string menggunakan metode toString(). Anda biasanya menginginkan pengkodean UTF-8 default, tetapi Anda dapat menunjukkan pengkodean yang berbeda jika diperlukan. Untuk mengonversi dari string ke objek Buffer, gunakan Buffer statis. metode from() - sekali lagi secara opsional meneruskan pengkodean

Jika Anda seorang Node. Jika pengembang js tertarik untuk memajukan pengetahuan Anda, tambahkan postingan ini ke daftar bacaan Anda

  • Node. Arsitektur js (masalah umum dan cara memperbaikinya)
  • Antrian di Node. js (semua jenis dijelaskan)
  • Node Kontainer. Aplikasi js Dengan Docker (panduan praktis)
  • Node. js Discord Bot (cara membuatnya)

FAQ

Q. Apakah buffer string?

String adalah urutan karakter, tetapi buffer adalah urutan byte. Meskipun buffer mungkin berisi konten yang dikodekan dari nilai string, buffer juga dapat mengkodekan jenis nilai lain atau data biner apa pun

Q. Apa yang dilakukan buffer di node JS?

Buffer memungkinkan penyimpanan dan manipulasi array byte, terutama saat bekerja dengan file. fungsi seperti fs. readFile mengembalikan objek Buffer saat membaca file biner. Fungsi juga penting untuk menangani komunikasi jaringan dan pemrosesan gambar

Q. Apa itu objek buffer dalam pemrograman?

Objek buffer adalah cara untuk abstrak urutan atau array byte. Selain operasi array umum seperti mendapatkan dan mengubah satu atau lebih elemen array byte, buffer biasanya memiliki metode lanjutan untuk membaca dan menulis nilai yang lebih kompleks seperti bilangan bulat, bilangan titik-mengambang, dan string.


Kami sedang merekrut

Jika Anda bersemangat tentang Node. js, datang dan bergabunglah dengan kami di Adeva. Kami selalu mencari talenta baru untuk bergabung dengan jaringan kami

Bagaimana cara membaca aliran ke buffer?

Untuk melakukannya, kita perlu menyetel properti objectMode pada objek aliran ke true . Jika kami mencoba mendorong beberapa data ke dalam aliran, data tersebut didorong ke dalam buffer aliran. Data yang didorong duduk di buffer sampai data dikonsumsi.

Apakah buffer adalah jenis Node.js?. aliran js?

Buffer. Di Node. js untuk memanipulasi aliran data biner, modul buffer dapat disertakan dalam kode. Namun, buffer adalah objek global di Node. js , karenanya tidak perlu mengimpornya dalam kode menggunakan metode yang diperlukan.

Apakah buffer dan streaming sama?

Buffering adalah praktik pra-pemuatan segmen data saat streaming konten video . Streaming — transmisi berkelanjutan file audio atau video dari server ke klien — adalah proses yang memungkinkan menonton video secara online.

Apakah buffer sama dengan Uint8Array?

Buffer adalah subkelas dari Uint8Array yang hanya tersedia di nodejs (untuk alasan historis). keduanya terutama digunakan untuk memanipulasi data biner (byte). secara historis, ketika nodejs pertama kali muncul, Uint8Arrays tujuan umum tidak ada, jadi ia harus menemukan tipe "Buffer" sendiri untuk menangani data biner.