Co to jest serializacja?

149

Rozpoczynam pracę z programowaniem obiektowym (OOP) i chciałbym wiedzieć: jakie jest znaczenie serializacji w języku OOP?

Społeczność
źródło
Zapoznaj się
Nipuna
4
Ten artykuł jest kompletny BS, stąd jego ocena.
RedAces,
Czy nie jest to rodzaj zbyt szerokich pytań, które są zwykle usuwane, ponieważ wyszukiwanie w Google dałoby natychmiastową odpowiedź?
arvymetal
2
@arvymetal miałeś rację. To był pierwszy wynik, kiedy
wyszukałem w

Odpowiedzi:

143

Serializacja to proces przekształcania obiektu w pamięci w strumień bajtów, dzięki czemu można robić takie rzeczy, jak przechowywanie go na dysku lub wysyłanie przez sieć.

Deserializacja to proces odwrotny: zamiana strumienia bajtów na obiekt w pamięci.

Andrew Barnett
źródło
46
Ponadto czasowniki Marshali Unmarshalsą synonimami Serializei Deserialize.
wulfgarpro,
4
Czy obiekt w pamięci nie jest już reprezentowany jako bajty na najniższym poziomie?
mahacoder
3
Obiekt w pamięci zostanie sformatowany przez kompilator, system operacyjny i / lub sprzęt. Zmień kompilator, a zmienisz format. Obiekt serializowany będzie miał format zdefiniowany przez Twój kod, więc możesz zagwarantować format. Jest to również pomocne przy wysyłaniu obiektów przez sieć - maszyna odbierająca może mieć zupełnie inną architekturę (a tym samym reprezentację w pamięci).
Andrew Barnett
1
Więc zamienia to w ciąg?
NoName
1
Ciąg może być prawidłowym formatem, ale nie musi to być ciąg. Same łańcuchy mają różne formaty (ASCII, UTF8, UTF16, EBCDIC ...) i dość dobrze pokazują koncepcję. Łańcuch (obiekt w pamięci) abcbyłby serializowany jako 0x61 0x62 0x63(ASCII) lub 0x00 0x61 0x00 0x62 0x00 0x63(UTF16) - z takimi elementami, jak terminatory NUL lub zakodowane długości, lub bez takich elementów.
Andrew Barnett
91

Mówiąc najprościej, serializacja to proces konwertowania obiektu na strumień bajtów, aby można go było przesłać przez sieć lub przechowywać w trwałym magazynie.

Deserializacja jest dokładnie odwrotna - pobierz strumień bajtów z sieci lub pamięci trwałej i przekonwertuj go z powrotem na obiekt o tym samym stanie .

Należy zrozumieć, w jaki sposób te strumienie bajtów są interpretowane lub manipulowane, aby uzyskać dokładnie ten sam obiekt / ten sam stan. Można to osiągnąć na różne sposoby. Niektórzy z nich są -

  1. XML : Konwertuj obiekt na XML, prześlij go przez sieć lub zapisz w pliku / db. Pobierz go i przekonwertuj z powrotem na obiekt o tym samym stanie. W Javie używamy biblioteki JAXB (architektura Java do wiązania XML) (od java 6 jest dostarczana w pakiecie z JDK).
  2. JSON : to samo można zrobić, konwertując Object na JSON (notacja obiektu JavaScript). Ponownie istnieje biblioteka GSON, której można użyć do tego.
  3. Lub możemy użyć serializacji, która jest dostarczana przez sam język OOP. Na przykład w Javie można serializować obiekt, dzięki czemu jest on implementowany Serializable interfacei zapisywany w strumieniu obiektów.
Aniket Thakur
źródło
@AniketThakur Bardzo dobre wyjaśnienie, czy możesz również podać link, abym mógł się o tym dowiedzieć JSONod zera, ponieważ nic o tym nie wiem
Kasun Siyambalapitiya
kiedykolwiek mówimy o serializacji, dlaczego zawsze odnosimy się tylko do obiektu. Nie możemy użyć serializacji w języku funkcjonalnym, w którym nie mamy żadnego obiektu, zamiast używać plików do przesyłania przez sieć.
Pardeep Sharma,
1
Po pierwsze, dlaczego musimy konwertować obiekt na strumień bajtów iz powrotem? Dlaczego nie jest to niejawna operacja dla użytkownika, który próbuje to zrobić?
Aparna Chaganti
1
Jeśli możemy użyć JSON lub XML, to dlaczego potrzebujemy lub mówimy, że konwertujemy je na bajty strumienia? A potem przechowujemy je tylko w JSOn lub XML zamiast konwertować je na bajty.
Muhammad Faizan Fareed
78

Proste wyjaśnienie za pomocą obrazu:

Rex, mój pies, jest serializowany!

Wyjaśnienie przez analogię:

Załóżmy, że rozmawiam z kumplem przez telefon i opowiadam mu o moim nowym szczeniaku.

Oto mój problem: szczeniak jest żywym, oddychającym ssakiem. Jak mam przekazać szczeniaka przez telefon? Nie mogę fizycznie umieścić szczeniaka w słuchawce telefonu.

Zamiast tego będę musiał przekazać telefonicznie przedstawienie szczeniaka. Innymi słowy, następnie serializuję mojego psa Rexa i wysyłam mu zserializowaną wersję Rexa przez linię telefoniczną:

{ "name":"Rex", "age":5, "favourite_food": pedigree_choice_cuts, "favourite_game": fetch_ball, "favourite_hobby": wagging_tail }

To idealna reprezentacja - serializacja mojego psa.

Podsumowanie:

Serializacja w zasadzie oznacza przekształcenie mojego psa Rexa w coś innego - obiekt JSON - który może być następnie przesyłany przez linię telefoniczną jako ciąg jedynek i zer. Mój kumpel z Nowego Jorku może następnie przetłumaczyć te 1 i 0 z powrotem na obiekt JSON - tak, aby miał doskonałą reprezentację mojego psa Rexa.

BKSpurgeon
źródło
16

Sprawdź to, to da ci dobre wyjaśnienie:

http://en.wikipedia.org/wiki/Serialization

Myślę, że najpowszechniejsze użycie terminu serializacja wiąże się z konwersją obiektu binarnego na reprezentację XML (lub inny ciąg), tak aby można go było przechowywać w bazie danych / pliku lub przesyłać przez sieć w wywołaniu usługi sieciowej. Deserializacja to proces odwrotny - konwersja XML / ciągu z powrotem do obiektu.

EDYCJA: Innym terminem, z którym możesz się spotkać, jest marshalling / unmarshalling. Marshalling to w zasadzie ta sama koncepcja, co serializacja, a cofanie odczytu jest tym samym, co deserializacja.

Andy White
źródło
3
Niekoniecznie tylko XML, może to być dowolna reprezentacja, nawet reprezentacja binarna
Matthew Farwell
7

Serializacja to proces konwertowania obiektu na strumień bajtów w celu przechowywania obiektu lub przesyłania go do pamięci, bazy danych lub pliku. Jego głównym celem jest zapisanie stanu obiektu, aby móc go odtworzyć w razie potrzeby. Proces odwrotny nazywa się deserializacją.

...

Ta ilustracja przedstawia ogólny proces serializacji

Ogólny proces serializacji

...

Dzięki serializacji programista może wykonywać czynności, takie jak wysyłanie obiektu do zdalnej aplikacji za pośrednictwem usługi sieci Web, przekazywanie obiektu z jednej domeny do drugiej, przepuszczanie obiektu przez zaporę sieciową jako ciąg XML lub utrzymywanie bezpieczeństwa lub specyficzne dla użytkownika informacje w aplikacjach

Od https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/

(podkreślenie moje)

Chamin Wickramarathna
źródło
5

Serializacja to proces konwersji nieuporządkowanych danych (takich jak obiekt) na serię tokenów, których można później użyć do zrekonstruowania oryginalnych danych. Formularz serializowany jest najczęściej ciągiem tekstu, ale nie musi.

Dave Sherohman
źródło
2

serializacja polega na przekształceniu obiektu w zapisywalną sekwencję bitów.

więc możesz zapisać tę sekwencję do pliku, bazy danych lub wysłać przez sieć.

później możesz deserializować go do rzeczywistego obiektu i użyć go ponownie w dowolnym momencie.

Usługi sieci Web i AJAX to najczęstszy przykład serializacji. Obiekty serializowane przed wysłaniem odpowiedzi do klienta.

Canavar
źródło
1

serializacja to nic innego jak przeniesienie obsługiwanego obiektu java do postaci obsługiwanej przez plik

                         (OR)

konwersja formy obsługiwanej przez java do postaci obsługiwanej przez sieć ... głównym zakresem serializacji jest nic innego jak przeniesienie danych z jednej warstwy do drugiej ... tylko obiekty serializowane możemy przesyłać przez sieć.

sriiii
źródło
1

Serializacja to proces konwersji obiektu obsługiwanego w języku Java, C # lub innym (w językach OOP) do postaci przenośnej. W ten sposób jest przesyłany przez sieć lub przechowywany na dysku. Aby klasa była możliwa do serializacji, musi implementować interfejs możliwy do serializacji.

Nesan Mano
źródło
nie tylko w języku Java czy C #, w większości języków programowania używamy serializacji. Np. W pythonie moduł pikle jest używany do tego samego.
Pardeep Sharma,
0

Serializacja przekształca dane w liniowy „ciąg” bajtów.

Inni powiedzieli mniej więcej to samo, ale podkreślam, że modele komputerowe wymagają, aby dane mieściły się w jednowymiarowej pamięci RAM lub trwałej pamięci.

Większość rzeczy, które są „danymi”, można z natury serializować (nawet jeśli musisz zredukować model abstrakcyjny do modelu liniowego); nie do serializacji to powiedzmy połączenie sieciowe lub skomplikowana maszyna stanowa, taka jak parser.

Przepełniony
źródło
0

serializacja ma do czynienia z konwersją obiektu binarnego na reprezentację XML (lub inny ciąg), tak aby można go było przechowywać w bazie danych / pliku lub przesyłać przez sieć w wywołaniu usługi sieciowej. Deserializacja to proces odwrotny - konwersja XML / ciągu z powrotem do obiektu.

viswanathan
źródło
0

Podczas tworzenia instancji (konstruowania) rzeczywistego obiektu (rzeczy) z klasy (planu) istnieje potrzeba zapisania obiektu (rzeczy) poprzez jego serializację (rozbicie do podstawowej struktury atomowej) do miejsca w pamięci. (Coś jak Star Treks Transporter). Rozbijasz to na strumień informacji, które mogą być gdzieś transportowane i przechowywane. Następnie, gdy chcesz zrekonstruować rzecz, po prostu przeciągasz atomowo przechowywaną instancję z powrotem do obiektu. Różni się od instaniacji.

David K. Hill
źródło
0

Serializacja to proces konwertowania obiektu na binarny strumień danych, dzięki czemu można go przechowywać w pliku lub wysyłać przez sieć, gdzie można go przywrócić do tego samego obiektu.

Ten dokument powinien pomóc w szczegółowym zrozumieniu serializacji Java.

Nikhil Katre
źródło
-1

Serializacja ma miejsce, gdy obiekt (fragment pamięci) jest tłumaczony w postaci, gdy stan obiektu można zapisać w pliku (jako przykład).

Potraktuj to tylko jako robienie ciasteczek - obiekt to ciasto, ciasteczko - to ciasto zserializowane.

Tak więc przez „serializację” możesz wysłać plik cookie do swojego znajomego.

Coś w tym stylu :-)

Panie ElectroNick
źródło
4
... poza tym, że ciasteczek nie można zamienić z powrotem w ciasto (zdeserializowane).
Dave Sherohman