Serializace dat při vstupu i výstupu ze souborů
Základní myšlenka trvalosti spočívá v tom, že objekt by měl být schopen zapsat svůj aktuální stav, který označuje hodnoty jejích členských proměnných, do trvalého úložiště. Později lze objekt znovu vytvořit čtením nebo deserializací stavu objektu z trvalého úložiště. Klíčovým bodem je, že samotný objekt zodpovídá za čtení a zápis vlastního stavu. Proto, aby třída byla trvalá, musí implementovat základní serializační operace.
Architektura poskytuje výchozí implementaci pro ukládání dokumentů do diskových souborů v reakci na příkazy Uložit a Uložit jako v nabídce Soubor a pro načítání dokumentů z diskových souborů v reakci na příkaz Otevřít. S velmi malou prací můžete implementovat schopnost dokumentu zapisovat a číst její data do a ze souboru. Hlavní věc, kterou musíte udělat, je přepsání serializace členské funkce ve třídě dokumentu.
Průvodce aplikací MFC umístí skeletal přepsání CDocument
členské funkce Serialize
ve třídě dokumentu, kterou pro vás vytvoří. Po implementaci členských proměnných aplikace můžete vyplnit Serialize
přepsání kódem, který odesílá data do archivovaného objektu připojeného k souboru. CArchive objekt je podobný cin a cout vstupní/výstupní objekty z knihovny C++ iostream. CArchive
Zapisuje a čte binární formát, ale ne formátovaný text.
O čem chcete vědět víc
Role dokumentu v serializaci
Architektura automaticky reaguje na příkazy Otevřít, Uložit a Uložit jako v nabídce Soubor voláním členské funkce dokumentu Serialize
, pokud je implementována. Příkaz ID_FILE_OPEN, například volá funkci obslužné rutiny v objektu aplikace. Během tohoto procesu uživatel uvidí dialogové okno Otevřít soubor a odpoví na ně a rozhraní získá název souboru, který uživatel zvolí. Architektura vytvoří CArchive
objekt nastavený pro načtení dat do dokumentu a předá archiv do Serialize
. Architektura už soubor otevřela. Kód členské funkce dokumentu Serialize
čte data v archivu a podle potřeby rekonstruuje datové objekty. Další informace o serializaci naleznete v článku Serializace.
Role dat v serializaci
Obecně platí, že data typu třídy by měla být schopna serializovat sama sebe. To znamená, že když předáte objekt do archivu, měl by objekt vědět, jak se zapsat do archivu a jak číst sám z archivu. MFC poskytuje podporu pro vytváření tříd serializovatelný tímto způsobem. Pokud navrhujete třídu pro definování datového typu a máte v úmyslu serializovat data tohoto typu, návrh serializace.