Co to jest serializacja?

W programowaniu komputerowym serializacja to proces pobierania struktury danych przechowywanej w pamięci lokalnej i przekształcania jej w strumień bajtów, który może być przesyłany przez sieć lub przechowywany na dysku w celu ponownego złożenia i wykorzystania przez inny program. Serializacji można również użyć do zapisania stanu obiektu, dzięki czemu można go później ponownie załadować za pomocą tego samego programu.Bardziej złożonym zastosowaniem tej funkcji jest wywołanie zdalnego wywołania procedury (RPC) , skutecznie uruchamiając procedurę na innym komputerze za pośrednictwem sieci. Mechanizm ten pozwala również na dystrybucję obiektów danych w dużym systemie sieciowym.

Prawie każdy współczesny język komputerowy ma albo natywną obsługę serializacji, albo bibliotekę dostępną w celu dodania tej funkcji. Gdy obiekt jest serializowany, wszystkie pola obiektu są spłaszczane. Proces ten jest również znany jako spłaszczanie lub marshalling.Dane są przekształcane w jednowymiarowy rząd bajtów, który można zapisać w dowolnym strumieniu wyjściowym.Rodzaj strumienia wyjściowego nie ma znaczenia i może to być plik lub gniazdo sieciowe.

Gdy dane zostaną zserializowane i wysłane do ich ostatecznej lokalizacji, rozpoczyna się proces deserializacji.Program, który odczytuje strumień bajtów, przywraca wszystkie informacje i umieszcza je w nowej instancji oryginalnego obiektu, tworząc dokładna kopia Ważne jest, aby zrozumieć, że tylko dane, które przechowywał obiekt, są uporządkowane; obiekt i jego metody oraz inne dane implementacyjne nie są.Oznacza to, że program, który deserializuje dane, musi być w stanie utworzyć instancję klasy, która była pierwotnie serializowana.

Serializacja struktury danych może być używana do różnych celów.Informacje o obiektach mogą być przechowywane na nośnikach fizycznych, dzięki czemu można przywrócić dokładny stan każdego obiektu do punktu, w którym znajdował się w momencie zatrzymania wykonywania programu.Może być używany do wysyłać wiadomości do innego komputera, które spowodują uruchomienie procedury zdalnej.Serializacja może być nawet wykorzystana do wydajnego porównywania zmian stanu w aplikacjach czasu rzeczywistego.

Przed użyciem serializacji obiektów ważne jest zrozumienie niektórych ograniczeń, jakie nakłada.Najważniejsze jest to, że w procesie konwersji obiektu na strumień bajtów, pola, które są zadeklarowane jako prywatne, zostaną ujawnione Podczas transmisji strumienia dane te mogą być przechwytywane i dekodowane, co stanowi lukę w zabezpieczeniach.Większość języków pozwala na zewnętrzne formaty serializacji danych, dzięki czemu możliwe jest kodowanie zastrzeżone. pomóc złagodzić to ryzyko.

Innym czynnikiem, o którym należy pamiętać, jest to, że serializacja ogólnie będzie działać tylko z obiektami, które są dokładnie takie same jak obiekt serializowany.Jeśli do obiektu zostaną dodane nowe pola lub metody , podpis obiektu ulegnie zmianie.Oznacza to, że przechowywany obiekt spowoduje wyjątek, a dane staną się nie do odzyskania, dopóki instancja oryginalnego niezmodyfikowanego obiektu nie spróbuje go przywrócić.