Oprócz tego, co mówią inne odpowiedzi:
Czasami chcesz serializować rzeczy, które nie są czystymi danymi.
Pomyśl na przykład o dojściu do pliku lub połączeniu z serwerem. Mimo że uchwyt pliku lub gniazdo to int
, liczba ta nie ma znaczenia przy następnym uruchomieniu programu. Aby poprawnie odtworzyć obiekty zawierające uchwyty takich rzeczy, należy ponownie otworzyć pliki i odtworzyć połączenia oraz zdecydować, co zrobić, jeśli to się nie powiedzie.
Wiele języków obsługuje obecnie przechowywanie anonimowych funkcji w obiektach, na przykład onBlah()
moduł obsługi w JavaScript. Jest to trudne, ponieważ taki kod może zawierać odniesienia do dodatkowych fragmentów danych, które z kolei wymagają serializacji. (A potem jest kwestia szeregowania kodu w sposób wieloplatformowy, co jest oczywiście łatwiejsze dla interpretowanych języków.) Mimo to, nawet jeśli obsługiwany jest tylko podzbiór języka, może okazać się całkiem użyteczny. Niewiele mechanizmów serializacji próbuje serializować kod, ale zobacz serialize-javascript .
W przypadkach, gdy chcesz serializować obiekt, ale zawiera on coś, co nie jest obsługiwane przez Twój mechanizm serializacji, musisz przepisać kod w sposób, który działa w ten sposób. Na przykład możesz użyć wyliczeń zamiast funkcji anonimowych, gdy istnieje ograniczona liczba możliwych funkcji.
Często chcesz, aby dane serializowane były zwięzłe.
Jeśli wysyłasz dane przez sieć lub nawet przechowujesz je na dysku, może być ważne, aby zachować mały rozmiar. Jednym z najprostszych sposobów osiągnięcia tego jest wyrzucenie informacji, które można odbudować (na przykład, odrzucając pamięci podręczne, tabele skrótów i alternatywne reprezentacje tych samych danych).
Oczywiście programista musi ręcznie wybrać, co ma zostać zapisane, a co wyrzucić, i upewnić się, że wszystko zostanie odbudowane po odtworzeniu obiektu.
Pomyśl o akcie zapisania gry. Obiekty mogą zawierać wiele wskaźników do danych graficznych, danych dźwiękowych i innych obiektów. Ale większość tych rzeczy można załadować z plików danych gry i nie trzeba ich przechowywać w pliku zapisu. Odrzucanie może być pracochłonne, więc często pozostawia się niewiele rzeczy. Sześciokrotnie edytowałem niektóre pliki składowania i odkryłem dane, które były wyraźnie zbędne, takie jak opisy tekstowe.
Czasami miejsce nie jest ważne, ale czytelność jest - w takim przypadku możesz zamiast tego użyć formatu ASCII (ewentualnie JSON lub XML).