Junior
Na aké druhy možno rozdeliť serializáciu?
sobes.tech AI
Odpoveď od AI
Serializáciu možno rozdeliť na nasledujúce základné druhy na základe spôsobu zobrazenia údajov:
-
Textová: Dáta sú zobrazené v čitateľnom formáte, najčastejšie vo forme reťazcov.
- Výhody: Jednoduché ladenie, nezávislosť od architektúry.
- Nevýhody: Väčšia veľkosť dát, potreba parsovania.
- Príklady: JSON, XML, YAML.
-
Binárna: Dáta sú zobrazené v surovom, binárnom formáte.
- Výhody: Kompaktnosť, vysoká rýchlosť serializácie/deserializácie.
- Nevýhody: Čítanie dát je sťažené bez schémy, môžu nastať problémy s kompatibilitou medzi rôznymi architektúrami (napr. endianness).
- Príklady: Protocol Buffers, Apache Thrift, Cap'n Proto, MessagePack.
Okrem toho, serializáciu možno klasifikovať podľa spôsobu použitia:
-
Ručná: Vývojár explicitne píše kód na prevod dát objektu na bajty a späť.
- Príklad:
// Príklad ručnej serializácie int int data = 12345; std::vector<char> buffer; buffer.resize(sizeof(int)); std::memcpy(buffer.data(), &data, sizeof(int)); -
Automatická (reflexia/kód generovanie): Používajú sa knižnice alebo nástroje, ktoré automaticky vykonávajú serializáciu/deserializáciu na základe informácií o štruktúre údajov.
- Príklad: Použitie knižníc ako Boost.Serialization, cereal, RapidJSON (s vlastnými adaptérmi), alebo nástrojov na generovanie kódu pre Protocol Buffers.
// Príklad použitia boost::serialization #include <boost/archive/binary_oarchive.hpp> #include <boost/archive/binary_iarchive.hpp> #include <fstream> #include <iostream> struct MyData { int x; double y; template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & x; ar & y; } }; void save(const MyData& data, const std::string& filename) { std::ofstream ofs(filename); boost::archive::binary_oarchive oa(ofs); oa << data; } void load(MyData& data, const std::string& filename) { std::ifstream ifs(filename); boost::archive::binary_iarchive ia(ifs); ia >> data; }
Dôležité je tiež zvážiť:
- Schémová vs bezšémová: Vyžaduje sa explicitné určenie štruktúry údajov (schéma) alebo je formát údajov samoopisujúci.
- Prúdová vs bufferovaná: Môže sa serializácia vykonávať počas prijímania údajov alebo je potrebný celý objem údajov v pamäti pred serializáciou/deserializáciou.