Binary serileştirme
- C++ kursu
- İleri seviye
- Ders 49/83
- 5 dk
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
#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
#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
std::ofstream ofs("data.bin", std::ios::____);
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 |