Buffer & Encoding

Bekerja dengan data biner: membuat Buffer, mengonversi ke hex/base64, dan memahami byte versus karakter.

Part 13 dari 24 ± 30 menit Gratis

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

EncodingDipakai untuk
utf8 (default)Teks
hexRepresentasi byte (hash, ID) — dua karakter per byte
base64 / base64urlMengirim data biner sebagai teks (email, JSON, JWT, data URL)
ascii, latin1Sistem 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 (data event) berupa Buffer.
  • crypto.randomBytes(16), hasil hash digest() tanpa encoding.
  • Body request HTTP mentah.

Hati-hati

  • Jangan memakai new Buffer() (usang & tak aman); gunakan Buffer.from / Buffer.alloc.
  • Mengonversi Buffer biner (mis. gambar) ke string UTF-8 lalu kembali akan merusak datanya.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X