June 9, 2023



Buffer adalah lokasi spesifik dalam memori mentah. Ini berfungsi sebagai ruang penyimpanan sementara untuk data biner berlebih yang tidak dapat diterima oleh unit pemrosesan pada saat itu.


Node.js menyertakan kelas Buffer. Itu dapat menangani data biner saat mengelola aliran TCP (Transfer Control Protocol) dan operasi baca-tulis pada sistem file.

Pelajari cara membuat, membaca, dan mengubah konten buffer.


Membuat Penyangga

Untuk membuat Buffer di Node.js, Anda akan menggunakan alokasikan() atau dari() metode. Itu alokasikan() metode membuat buffer baru, menentukan ukurannya selama pembuatan sebagai parameter pertama dan satu-satunya yang diperlukan. Ini berguna saat Anda tidak memiliki data untuk disimpan pada saat pembuatan buffer.

Tentukan parameter ukuran buffer dalam byte saat Anda membuat buffer dengan alokasikan() metode. Sebagai contoh:

 const buf = Buffer.alloc(8);
console.log(buf);

Kelas Buffer secara otomatis menambahkan nol sebagai nilai placeholder untuk data baru saat Anda membuatnya dengan alokasikan() metode.

Kelas Buffer menyatakan setiap nilai 0 sebagai 00, menggunakan format heksadesimal. Dalam contoh ini, berisi total delapan nilai.

Untuk menginisialisasi Buffer dengan nilai placeholder yang berbeda, lewati satu detik mengisi parameter:

 const buf_filled = Buffer.alloc(8, 5);
console.log(buf_filled);

Objek ini mengutip bagian dalam memori yang menyimpan 8 byte dari nilainya 05. Perhatikan bahwa meskipun Anda memberikan nomor sebagai mengisi parameter, buffer hanya menyimpan data dalam biner.

Setelah mengalokasikan memori ke Buffer, tulis data dengan memanggil menulis() metode:

 const buf = Buffer.alloc(8);

buf.write("v", "utf-8");
console.log(buf)

buf.write("va","utf-8");
console.log(buf)

Itu menulis() metode menggunakan pengkodean karakter untuk mengubah parameter pertama, menggunakan utf-8 dan kemudian menulis string ke Buffer. Menambahkan karakter kedua ke string akan mengisi byte kedua.

Untuk mengekstrak data dari tipe data yang ada seperti string atau array, gunakan dari() metode. Metode ini membuat buffer dari string dan array.

Sebagai contoh:

 
const stringBuf = Buffer.from('string')
console.log(stringBuf)


const arrayBuf = Buffer.from([97, 114, 114, 97, 121], 'hex')
console.log(arrayBuf);

Itu dari() metode mengambil input sebagai parameter pertama, menghitung jumlah byte yang dibutuhkan untuk menyandikan data, dan kemudian mengirimkan hasilnya ke Buffer. Dengan menyediakan format penyandian lain sebagai parameter kedua, Anda dapat mengganti penyandian default (UTF-8).

Mengoper nomor ke dari() metode akan menghasilkan kesalahan.

Membaca Penyangga

Meskipun Buffer mirip dengan array, mereka tidak dapat diubah ukurannya dan dapat ditangani data komputer biner berkat metode bawaan.

Kelas Buffer memungkinkan kita membaca byte individual dari datanya menggunakan sintaks braket persegi JavaScript.

Sebagai contoh:

 const myBuf = Buffer.from('Mine');
console.log(MyBuf[1]);

console.log(MyBuf[3]);

console.log(MyBuf[5]);

Blok kode di atas menggunakan sintaks braket persegi untuk mendapatkan nilai byte pertama dan ketiga dalam representasi desimalnya. Mencoba untuk mendapatkan byte yang tidak valid akan menghasilkan tidak terdefinisi kesalahan.

Untuk mengakses semua datanya, kelas Buffer dilengkapi dengan metode toJSON() dan keString()yang memperoleh konten dalam dua format berbeda.

Itu keString() metode menghasilkan string sebagai konten buffer:

 const myBuf = Buffer.from('Mine');
console.log(myBuf.toString());

const numberBuf = Buffer.from([123]);
console.log(numberBuf.toString())

const emptyBuf = Buffer.alloc(5);
console.log(emptyBuf.toString());

Panggilan pertama menginisialisasi Buffer dengan nilai “Milikku”, yang direplikasi oleh panggilan ke toString. Contoh kedua menggunakan array int tunggal untuk inisialisasi, yang memiliki representasi string sebagai “{” karakter. Dalam kasus terakhir, Buffer dengan lima nilai nol mengembalikan string “\x00\x00\x00\x00\x00”. Tali \x00 adalah representasi heksadesimal dari nol.

Itu keString() metode selalu menampilkan hasil dalam format string, apa pun jenis data yang Anda gunakan untuk menginisialisasi Buffer.

Itu .toJSON() metode mengembalikan representasi desimal dari data Buffer, terlepas dari data yang Anda gunakan untuk menginisialisasi Buffer.

Sebagai contoh:

 const myBuf = Buffer.from('Mine');
console.log(myBuf.toJSON());
// output: { type: 'Buffer', data: [ 77, 105, 110, 101 ] }

Output JSON memiliki Tipe properti dengan nilai Penyangga untuk menunjukkan asalnya. Properti datanya menyimpan larik desimal yang mewakili larik byte asli.

Memodifikasi Buffer

Mirip dengan mengakses byte individual dari Buffer, Anda juga dapat memodifikasi byte individual dari konten Buffer menggunakan sintaks braket persegi.

Saat menggunakan sintaks kurung siku untuk mengubah konten individual, Anda hanya dapat menetapkan representasi desimal dari nilai tersebut.

Sebagai contoh:

 myBuf[0] = 70
console.log(myBuf.toString())

Karena buffer adalah data biner, Anda tidak dapat memberikan string pada bagian tertentu dari buffer. Jika Anda mencoba menyetel satu byte ke string, Buffer akan menerjemahkannya menjadi karakter nol.

Sebagai contoh:

 myBuf[0] = 'F';
console.log(myBuf.toString());

Sebagai alternatif, Anda dapat mengubah seluruh isi buffer menggunakan menulis() metode.

Pertimbangkan untuk memasukkan indeks di luar panjang Buffer. Alih-alih mengembalikan kesalahan, Buffer mengabaikan indeks yang tidak valid dan mempertahankan konten Buffer asli tetap utuh.

Misalnya, coba atur elemen kelima dari myBuf ke r melalui representasi desimalnya dari 114:

 myBuf[4] = 114;
console.log(myBuf.toString());

Perhatikan bahwa keString() metode mengembalikan nilai yang sama ‘Milikku’.

Karena Anda tidak dapat mengubah ukuran Buffer, mencoba menulis lebih banyak data daripada yang dapat disimpan akan mengakibatkan Buffer membuang data tambahan. Sebagai contoh:

 const buf1 = Buffer.alloc(5)
buf1.write('number');
console.log(buf1.toString())

Menggunakan keString() metode untuk mengkonfirmasi data buffer, ia kembali ‘numbe’ daripada ‘nomor’. Yang merupakan argumen yang dimasukkan di dalam menulis() metode.

Buffer menulis secara serial dimulai dari indeks nol. Itu menulis() metode serial menambahkan byte ke Buffer, menimpa data sebelumnya.

Sebagai contoh:

 const buf2 = Buffer.alloc(6);

buf2.write('member');
console.log(buf2.toString())

buf2.write('hi');
console.log(buf2.toString());

Kode di atas membuat buffer enam byte dan menambahkan string “anggota” untuk itu menggunakan menulis() metode.

Itu kemudian memperbarui buffer dengan konten baru yang memakan lebih sedikit ruang memori daripada konten sebelumnya.

Ini menghasilkan pembuatan string baru dengan dua byte pertama yang ditimpa dan byte yang tersisa tidak diubah.

Banyak API dan Struktur Data Menggunakan Buffer

Sekarang Anda tahu cara membuat buffer, menulis ke buffer, membaca isinya, dan memodifikasinya dengan metode yang sesuai.

Ada beberapa metode lain yang tersedia untuk bekerja dengan kelas Buffer Node.js.

Anda harus mengetahui metode ini dan memahami Buffer untuk memahami cara kerja berbagai konsep seperti aliran dan sistem file.

Leave a Reply

Your email address will not be published. Required fields are marked *