berkmenoo 1
berkmenoo
farkmt2official 1
farkmt2official
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Hikaye Ekle

[NODE JS] Buffer Oluşturma ve Kullanımı

nodejs.png


[NODE JS] Buffer Oluşturma ve Kullanımı​


Buffer, Node.js'in en temel yapı taşlarından biridir. JavaScript'in tarayıcı ortamında binary veriyle doğrudan çalışma yeteneği sınırlıdır; ancak Node.js sunucu tarafında dosya okuma, ağ iletişimi ve veri işleme gibi görevler için binary verilerle çalışmak kaçınılmazdır. İşte Buffer sınıfı tam bu ihtiyacı karşılamak için tasarlanmıştır. Ben Node.js öğrenirken Buffer kavramını en başta gereksiz bulmuştum, ta ki bir dosya yükleme sistemi yazana kadar. O projede kullanıcıların yüklediği resimleri işlerken Buffer olmadan hiçbir şey yapamayacağımı fark ettim.

Buffer, sabit boyutlu bir bellek bloğunu temsil eder. Bir dizi byte'tan oluşur ve oluşturulduktan sonra boyutu değiştirilemez. Bu özellik, C dilindeki dizilere benzer ve JavaScript'in dinamik dizilerinden farklıdır. Buffer nesneleri V8 JavaScript motoru dışında, doğrudan sistem belleğinde (heap dışında) tahsis edilir. Bu sayede çöp toplayıcının baskısını azaltır ve büyük binary verilerle çalışırken daha iyi performans sağlar.

Buffer oluşturmanın birkaç yolu vardır. Buffer.alloc() belirtilen boyutta sıfırlarla doldurulmuş güvenli bir buffer oluşturur. Buffer.allocUnsafe() ise daha hızlıdır ama eski bellek içeriklerini barındırabilir; güvenlik açısından hassas olmayan senaryolarda performans kazancı sağlar. Buffer.from() metodu ise var olan bir veriyi (string, dizi veya başka bir buffer) buffer'a dönüştürür.

Buffer'lar üzerinde çeşitli okuma ve yazma işlemleri yapabilirsiniz. Tek byte okuma/yazma, belirli bir konumdan itibaren veri kopyalama, dilimleme (slice), karşılaştırma ve birleştirme gibi işlemler desteklenir. Ayrıca readInt32BE, writeFloatLE gibi özel metodlarla farklı veri tiplerini binary formatında okuyup yazabilirsiniz. BE ve LE son ekleri, byte sıralamasını belirtir: Big Endian ve Little Endian.

Pratikte Buffer'ları en çok stream işlemlerinde, dosya okuma/yazma işlemlerinde, ağ programlamada ve kriptografik işlemlerde kullanırsınız. HTTP isteklerinden gelen veriler buffer olarak gelir, dosyadan okunan ham veri buffer'dır, TCP soketlerinden alınan paketler buffer'dır. Bu yüzden Buffer'ı iyi anlamak Node.js'te ileri seviye geliştirme yapabilmenin ön koşuludur.

Bellek yönetimi açısından dikkatli olmanız gereken noktalar vardır. Çok sayıda küçük buffer oluşturmak yerine büyük bir buffer tahsis edip dilimlemek daha verimlidir. Buffer.slice() yeni bir bellek tahsis etmez, orijinal buffer'ın bir görünümünü döndürür. Bu, bellek tasarrufu sağlar ama orijinal buffer üzerindeki değişikliklerin dilimde de görüleceği anlamına gelir. Bağımsız bir kopya istiyorsanız Buffer.from() ile yeni bir buffer oluşturmalısınız.

JavaScript:
const { Buffer } = require('buffer');

// ===== BUFFER OLUŞTURMA YÖNTEMLERİ =====

// 1. Güvenli oluşturma - sıfırlarla doldurulur
const guvenliBuffer = Buffer.alloc(16);
console.log('Güvenli buffer:', guvenliBuffer);
// <Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00>

// 2. Belirli değerle doldurulmuş buffer
const doluBuffer = Buffer.alloc(8, 0xFF);
console.log('Dolu buffer:', doluBuffer);
// <Buffer ff ff ff ff ff ff ff ff>

// 3. Güvensiz oluşturma (hızlı ama eski bellek içeriği olabilir)
const hizliBuffer = Buffer.allocUnsafe(16);
console.log('Hızlı buffer (rastgele içerik):', hizliBuffer);

// 4. String'den buffer oluşturma
const metinBuffer = Buffer.from('Merhaba Dünya! Türkçe karakterler: şçğüöıİŞÇĞÜÖ', 'utf-8');
console.log('Metin buffer boyutu:', metinBuffer.length, 'byte');
console.log('Metin geri dönüşüm:', metinBuffer.toString('utf-8'));

// 5. Diziden buffer oluşturma
const diziBuffer = Buffer.from([72, 101, 108, 108, 111]);
console.log('Dizi buffer:', diziBuffer.toString()); // "Hello"

// 6. Hex string'den buffer oluşturma
const hexBuffer = Buffer.from('48656c6c6f', 'hex');
console.log('Hex buffer:', hexBuffer.toString()); // "Hello"

// ===== BUFFER OKUMA VE YAZMA İŞLEMLERİ =====

const tampon = Buffer.alloc(32);

// Tek byte yazma ve okuma
tampon[0] = 0x4E; // 'N'
tampon[1] = 0x6F; // 'o'
tampon[2] = 0x64; // 'd'
tampon[3] = 0x65; // 'e'
console.log('İlk 4 byte:', tampon.slice(0, 4).toString()); // "Node"

// Sayısal değerler yazma (Big Endian - ağ byte sırası)
tampon.writeUInt16BE(8080, 4);   // Port numarası
tampon.writeUInt32BE(3232235777, 6); // IP adresi (192.168.1.1)
tampon.writeFloatBE(3.14, 10);    // Ondalık sayı

// Sayısal değerler okuma
const port = tampon.readUInt16BE(4);
const ipSayisal = tampon.readUInt32BE(6);
const piDegeri = tampon.readFloatBE(10);

console.log('Port:', port);              // 8080
console.log('IP (sayısal):', ipSayisal); // 3232235777
console.log('Pi değeri:', piDegeri.toFixed(2)); // 3.14

// IP adresini okunabilir formata çevirme
function ipOkunabilir(sayi) {
  return [
    (sayi >>> 24) & 0xFF,
    (sayi >>> 16) & 0xFF,
    (sayi >>> 8) & 0xFF,
    sayi & 0xFF
  ].join('.');
}
console.log('IP adresi:', ipOkunabilir(ipSayisal)); // 192.168.1.1

// ===== BUFFER İŞLEMLERİ =====

// Birleştirme
const parca1 = Buffer.from('Merhaba ');
const parca2 = Buffer.from('Dünya!');
const birlesik = Buffer.concat([parca1, parca2]);
console.log('Birleşik:', birlesik.toString()); // "Merhaba Dünya!"

// Karşılaştırma
const buf1 = Buffer.from('abc');
const buf2 = Buffer.from('abd');
const karsilastirma = buf1.compare(buf2);
console.log('Karşılaştırma:', karsilastirma); // -1 (buf1 < buf2)

// İçerik arama
const aramaBuffer = Buffer.from('Node.js ile buffer işlemleri çok güçlüdür');
const konum = aramaBuffer.indexOf('buffer');
console.log('Bulunan konum:', konum); // byte konumu

// Kopyalama
const kaynak = Buffer.from('Kaynak veri burada');
const hedef = Buffer.alloc(10);
kaynak.copy(hedef, 0, 0, 10); // İlk 10 byte'ı kopyala
console.log('Kopyalanan:', hedef.toString());

// Buffer boyut bilgisi
console.log('
--- Buffer Bilgileri ---');
console.log('Buffer havuz boyutu:', Buffer.poolSize); // 8192 byte
console.log('Metin buffer byte uzunluğu:', Buffer.byteLength('Türkçe', 'utf-8')); // 8

// JSON dönüşümü
const jsonBuffer = Buffer.from([1, 2, 3, 4, 5]);
const jsonTemsil = JSON.stringify(jsonBuffer);
console.log('JSON temsili:', jsonTemsil);
const geriYuklenen = Buffer.from(JSON.parse(jsonTemsil).data);
console.log('Geri yüklenen:', geriYuklenen);

Buffer, Node.js'in binary veri dünyasına açılan kapısıdır. Dosya işlemlerinden ağ programlamaya, kriptografiden veri sıkıştırmaya kadar pek çok alanda Buffer bilgisi gereklidir. Temel oluşturma yöntemlerini, okuma/yazma işlemlerini ve bellek yönetimi prensiplerini kavradığınızda Node.js'te yapabileceklerinizin sınırları genişler.
 
Emeğiniz ve katkınız için teşekkür ederiz!
Konunuz gerekli incelemelerden geçerek onaylandı. Topluluğumuza katkılarınızın devamını bekliyoruz.
İyi forumlar! 🎉
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst