CodeBlanks Logo Icon CodeBlanks

Binary serileştirme

Binary serileştirme ile nesneleri dosyaya yazmayı öğrenirsin.

Binary serileştirme nedir?

Binary serileştirme, bir nesnenin bellek içeriğini doğrudan bayt bayt dosyaya yazmaktır. İnsan tarafından okunamaz ama hızlıdır ve yer kazanır. C++'ta std::ofstream'i std::ios::binary kipinde açıp write metoduyla yazarsın.

Örnek: std::ofstream ofs("data.bin", std::ios::binary); ofs.write(reinterpret_cast<const char*>(&value), sizeof(value));. Burada reinterpret_cast, değeri bayt dizisi gibi görmemizi sağlar; sizeof(value) yazılacak bayt sayısıdır. Geri okurken de std::ifstream ile read metodu kullanılır. Bu yöntem basit ama yapıya özgüdür: başka bir derleyicide farklı bellek yerleşimi bozabilir.

sizeof ve reinterpret_cast

Binary yazarken iki şey gerekir: verinin adresi ve boyutu. Adresi reinterpret_cast<const char*>(&value) ile alırsın; bu, değeri bayt işaretçisi olarak görür. Boyutu sizeof(value) verir.

Örneğin bir int 4 bayttır. ofs.write(reinterpret_cast<const char*>(&n), sizeof(n)); tam 4 bayt yazar. Geri okurken aynı yöntemi kullanırsın: ifs.read(reinterpret_cast<char*>(&n), sizeof(n));. Burada char* (const'süz) kullanılır çünkü okunan veriyi değişkene yazacaksın. Bu döngüyü her alan için tekrarlayarak tüm yapıyı serileştirebilirsin.

Uygulama İkili dosyaya yaz ve oku

int value = 42; tanımla. std::ofstream ofs("data.bin", std::ios::binary) aç ve ofs.write(reinterpret_cast<const char*>(&value), sizeof(value)) ile yaz. Sonra std::ifstream ifs("data.bin", std::ios::binary) aç ve ifs.read(reinterpret_cast<char*>(&loaded), sizeof(loaded)) ile oku. Okunan değeri std::cout ile yazdır.

Başlangıç kodu

main.cpp
#include <iostream>
#include <fstream>

// Değeri ikili dosyaya yaz ve geri oku

int main() {
    // write ve read çağrılarını ekle
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <fstream>

int main() {
    int value = 42;
    std::ofstream ofs("data.bin", std::ios::binary);
    ofs.write(reinterpret_cast<const char*>(&value), sizeof(value));
    ofs.close();

    int loaded = 0;
    std::ifstream ifs("data.bin", std::ios::binary);
    ifs.read(reinterpret_cast<char*>(&loaded), sizeof(loaded));
    ifs.close();

    std::cout << loaded;
    return 0;
}

Beklenen çıktı

42

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Binary kipi tamamla

Soru
std::ofstream ofs("data.bin", std::ios::____);
Cevap
std::ofstream ofs("data.bin", std::ios::binary);

Açıklama: std::ios::binary dosyayı ikili kipte açar.

2 Binary serileştirmenin avantajı nedir?

  • Daha hızlı ve yer kazanması Doğru cevap
  • İnsan tarafından okunabilir olması
  • Platform bağımsız olması
  • Metin editöründe düzenlenebilmesi

Açıklama: Binary, text'e göre daha hızlıdır ve daha az yer kaplar.

3 Parçayı rolüne eşle

Kavram Anlamı
std::ios::binary İkili kip
ofs.write(...) Bayt yazar
ifs.read(...) Bayt okur
reinterpret_cast Bayt işaretçiye çevirir

İleri seviye bölümündeki tüm dersler