All english written articles have English article tag and lays under horizontal line. First part is written in Czech.

pátek 2. března 2012

XNA Serializace / XNA Serialization

Je to vlastně proces při kterém se ukládají objekty do souboru aby se při dalším spuštění programu mohly znovu načíst a dále používat. Bude to použito k ukládání místností v žvb2. Nejčastěji se provádí XML serializace nebo také binární (zápis informací ve dvojkové formě do souboru). XML je docela fajn a dá se snadno editovat, ale já to moc nemusím, nelíbí se mi jak se to cele prochází při zpracování. Nějaké to node a spol. Binární serializace je mi o dost bližší. Používá jej RunUO které používá žvb1. Každá třída má svou metodu serialize a deserialize ve které provádí zápis ale také čtení z datového proudu. Hodnoty musí být zapsány a potom vyzvednuty ve stejném pořadí to je snad jediné úskalí této metody. Já jsem nakonec vzal právě binární serializaci přímo z RunUO a jen ji trochu promazal a upravil. Snad se to smí. Níže je jakási moje úvaha o tom jaký způsob přesně použít. Jsou v zásadě 3 o kterejch jsem uvažoval aniž bych musel číst nebo hledat řešení od někoho jiného, jak to obvykle dělám.

do jednoho souboru:
bin soubor
Typ komponenty
data

Při chybě nebo ztrátě typu máme totální smůlu a je to celé v háji.

do dvou souboru:
bin soubor                                         idx soubor
    data                                                       typ
                                                          start záznamu
                                                         délka záznamu

Při ztrátě typu nebo chybě přeskočíme daný blok a pokračujeme dalším. Při chybě v indexu máme smůlu.

do tří souborů - ala RunUO:
bin soubor                         idx soubor                         pdb soubor
data                                       id typu                             typy podle id
                                         start záznamu
                                        délka záznamu
Při ztrátě typu se prostě jen ignoruje to dané id, při chybě v indexu máme smůlu.



Serialization is process that save objects states into file/s and than load them and use them in future. Most common ways is use XML or writing binary files. XML is quite good, it can be simply edited with normal text editor, but I don't like way of parsing files with nodes. So I choose binary files. I have some good experiencis with this way (žvb 1 emulator RunUO used this) and is possible simply correct errors such as mising type of component or error in getting values. Each class that can be serialized have special constructor and two methods Serialize and Deserialize. Thats all that is requred. Only disandvatage is that variables must be saved and loaded in same order. So I chose binary serialization from RunUO and make some small corrections. I will post another blog entry when I think that is all working properly. Firt, I must choose one of three methods that I know.

to one file:
bin file
Component type
data

When error is occoured all date are lost

to two files:
bin file                                                   idx file
    data                                             Component type
                                                   start position in stream
                                                         length of stream

When error is occoured we can easily skip demaged area and try to continue with loading. If error is in index file everything is lost

do tří souborů - ala RunUO:
bin file                                 idx file                                pdb file
data                                    id of type                        type of component
                                start position in stream
                                      length in stream

Same as above but we have types saved in extra file. Missing types can be easily skipped by id.

Žádné komentáře:

Okomentovat