... i rozpakowywanie / deserializowanie? Wyjaśnienie Wikipedii nie pozostawia mnie mądrzejszym! Jestem programistą Java, na wypadek gdyby terminologia była używana inaczej w różnych językach.
... i rozpakowywanie / deserializowanie? Wyjaśnienie Wikipedii nie pozostawia mnie mądrzejszym! Jestem programistą Java, na wypadek gdyby terminologia była używana inaczej w różnych językach.
Odpowiedzi:
Ważna jest tutaj semantyka:
Marshalling oznacza przenoszenie danych, nie oznacza transformacji danych z ich natywnej reprezentacji lub przechowywania. Obiekty Java można przesyłać przez sieć w ich natywnej reprezentacji.
Serializacja oznacza przekształcenie danych do jakiejś nienatywnej reprezentacji pośredniej. Na przykład: przekształcenie obiektu Java w JSON lub XML.
Oczywiście w większości systemów, w których dane Marshal są przesyłane, szereguje się je w jakimś innym formacie niż macierzysty, zanim zostaną przetransportowane.
To pytanie zostało zadane wcześniej, ale na StackOverflow. Oto link.
Cytat odpowiedzi udzielonej przez Jeffrey'a Hantina :
Marshaling i serializacja są luźno synonimiczne w kontekście zdalnego wywoływania procedur, ale semantycznie odmienne w celu.
W szczególności marshaling polega na przekazywaniu parametrów z miejsca na miejsce, podczas gdy serializacja polega na kopiowaniu danych strukturalnych do lub z pierwotnej postaci, takiej jak strumień bajtów. W tym sensie serializacja jest jednym ze sposobów przeprowadzania zestawiania, zwykle implementując semantykę według wartości.
Możliwe jest również, aby obiekt był zestawiany przez odniesienie, w którym to przypadku dane „na przewodzie” są po prostu informacją o lokalizacji oryginalnego obiektu. Jednak taki obiekt nadal może podlegać serializacji wartości.
Jak wspomina @Bill, mogą istnieć dodatkowe metadane, takie jak lokalizacja bazy kodu, a nawet kod implementacji obiektu.
Marshaller robi wszystko, co trzeba, aby rzutować strukturę danych, która ma być przenoszona z jednego miejsca do drugiego. Kiedy mówię o „strukturze danych”, może to być cokolwiek. Od samego obiektu (dane stanu => wartości pól) do odwołania do pamięci tego obiektu, który będzie obsługiwany po stronie klienta przez „Stub”, a po stronie serwera przez „Proxy”. Oznacza to, że Marshaller mógłby użyć „Serializatorów” do przekształcenia tej struktury danych w reprezentację niskiego poziomu, znacznie łatwiejszą do transportu. Ścieżka transformacji może zawierać inne komponenty, takie jak kompresory, kompilatory, adaptery itp. Dla mnie Serializer jest częścią Marshallera.