Buffer & Encoding
Bekerja dengan data biner: membuat Buffer, mengonversi ke hex/base64, dan memahami byte versus karakter.
Data bukan selalu teks
Gambar, PDF, audio, data jaringan — semuanya biner (deretan byte). JavaScript di browser awalnya tidak punya tipe untuk itu, sehingga Node memperkenalkan Buffer: potongan memori berukuran tetap berisi byte (nilai 0–255). Buffer adalah turunan Uint8Array dan tersedia global (tanpa require).
Membuat Buffer
const a = Buffer.from('Halo'); // dari string (UTF-8 default)
const b = Buffer.from([0x4b, 0x49, 0x54, 0x41]); // dari array byte
const c = Buffer.alloc(8); // 8 byte berisi nol
const d = Buffer.from('48616c6f', 'hex'); // dari hex
const e = Buffer.from('SGFsbw==', 'base64');// dari base64
console.log(a); // <Buffer 48 61 6c 6f>
console.log(b.toString()); // 'KITA'
console.log(a.length); // 4 (jumlah BYTE)
Byte vs karakter
Satu karakter tidak selalu satu byte. UTF-8 memakai 1–4 byte per karakter:
'Cafe'.length // 4 karakter
Buffer.from('Cafe').length // 4 byte
'Café'.length // 4 karakter
Buffer.from('Café').length // 5 byte (é = 2 byte)
Buffer.byteLength('日本語') // 9 byte
Ini penting untuk header Content-Length dan batas ukuran upload: ukurlah dalam byte, bukan .length string.
Encoding
| Encoding | Dipakai untuk |
|---|---|
utf8 (default) | Teks |
hex | Representasi byte (hash, ID) — dua karakter per byte |
base64 / base64url | Mengirim data biner sebagai teks (email, JSON, JWT, data URL) |
ascii, latin1 | Sistem lama |
const buf = Buffer.from('Halo KelasIT');
buf.toString('hex'); // '48616c6f204b656c61734954'
buf.toString('base64'); // 'SGFsbyBLZWxhc0lU'
Buffer.from('SGFsbyBLZWxhc0lU', 'base64').toString(); // 'Halo KelasIT'
Base64 membuat data ±33% lebih besar; ini pengkodean, bukan enkripsi — siapa pun bisa mendekodenya.
Operasi umum
Buffer.concat([buf1, buf2]); // gabung
buf.slice(0, 4); // potongan (berbagi memori, bukan salinan!)
buf.equals(lain); // bandingkan isi
buf[0]; // byte ke-0 sebagai angka (72)
buf.readUInt16BE(0); // baca angka biner (big-endian)
Buffer.isBuffer(x);
Di mana kamu menemuinya?
fs.readFile('foto.png')tanpa encoding → Buffer.- Chunk pada stream (
dataevent) berupa Buffer. crypto.randomBytes(16), hasil hashdigest()tanpa encoding.- Body request HTTP mentah.
Hati-hati
- Jangan memakai
new Buffer()(usang & tak aman); gunakanBuffer.from/Buffer.alloc. - Mengonversi Buffer biner (mis. gambar) ke string UTF-8 lalu kembali akan merusak datanya.