C++
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.
Örnek çözümü göster
#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;
}
Kendini test et
-
Binary kipi tamamla
std::ofstream ofs("data.bin", std::ios::____);
Cevabı göster
std::ofstream ofs("data.bin", std::ios::binary);
-
Binary serileştirmenin avantajı nedir?
- Daha hızlı ve yer kazanması
- İnsan tarafından okunabilir olması
- Platform bağımsız olması
- Metin editöründe düzenlenebilmesi
Cevabı göster
Daha hızlı ve yer kazanması — Binary, text'e göre daha hızlıdır ve daha az yer kaplar.
-
Parçayı rolüne eşle
- std::ios::binary
- İkili kip
- ofs.write(...)
- Bayt yazar
- ifs.read(...)
- Bayt okur
- reinterpret_cast
- Bayt işaretçiye çevirir
Sıradaki ders: Text serileştirme