Jaka jest różnica między marshallerem a serializatorem?

20

... 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.

piana
źródło

Odpowiedzi:

30

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.

JimmyJames
źródło
13

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.

Alegen
źródło
2

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.

HABOT QDroid
źródło