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óre mogą być przesyłane przez sieć lub przechowywane na dysku w celu ponownego złożenia i wykorzystania przez inny program. Serializacji można również użyć do zapisania stanu obiektu, aby można go było później załadować ponownie przez ten sam program. 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 umożliwia także dystrybucję obiektów danych w dużym systemie sieciowym.
Niemal każdy współczesny język komputerowy ma natywną obsługę serializacji lub bibliotekę, która umożliwia dodanie tej funkcji. Gdy obiekt jest serializowany, wszystkie pola obiektu są spłaszczone. Proces ten jest również znany jako deflacja 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 być plikiem lub gniazdem sieciowym.
Po serializacji danych i wysłaniu do ostatecznego położenia rozpoczyna się proces deserializacji. Program odczytujący 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 gromadzone są tylko dane, które obiekt trzymał; obiekt i jego metody oraz inne dane implementacyjne nie są. Oznacza to, że program, który dokonuje deserializacji danych, musi być w stanie utworzyć instancję klasy, która była pierwotnie serializowana.
Serializacja struktury danych może być wykorzystywana do różnych celów. Informacje o obiekcie mogą być przechowywane na nośniku fizycznym, dzięki czemu można przywrócić dokładny stan każdego obiektu do momentu, w którym był w momencie zatrzymania wykonywania programu. wysyłać wiadomości do innego komputera, który spowoduje uruchomienie procedury zdalnej. Serializacji można nawet użyć do skutecznego porównania zmian stanu w aplikacjach czasu rzeczywistego.
Przed zastosowaniem serializacji obiektu ważne jest, aby zrozumieć niektóre z nałożonych przez niego ograniczeń. Najważniejsze jest to, że w procesie konwersji obiektu na strumień bajtów ujawnione zostaną pola zadeklarowane jako prywatne Podczas transmisji strumienia dane te mogą być przechwytywane i dekodowane, co stanowi lukę w zabezpieczeniach. Większość języków pozwala na eksternalizację formatów serializacji danych, dzięki czemu możliwe jest zastrzeżone kodowanie pomóc zmniejszyć to ryzyko.
Innym czynnikiem, o którym należy pamiętać, jest to, że serializacja na ogół będzie działać tylko z obiektami, które są dokładnie takie same jak obiekt zserializowany. Jeśli do obiektu zostaną dodane nowe pola lub metody , wówczas podpis obiektu ulegnie zmianie. Oznacza to, że przechowywany obiekt spowoduje wyjątek, a dane staną się niemożliwe do odzyskania, dopóki instancja oryginalnego niezmodyfikowanego obiektu nie podejmie próby jego przywrócenia.