Qual è la differenza tra un marshaller e un serializzatore?


20

... e smascheramento / deserializzazione? La spiegazione di Wikipedia non mi lascia saggio! Sono un programmatore Java, nel caso in cui la terminologia venga utilizzata in modo diverso in lingue diverse.

Risposte:


30

La semantica è importante qui:

Il marshalling implica lo spostamento dei dati, non implica la trasformazione dei dati dalla loro rappresentazione o archiviazione nativa. Gli oggetti Java possono essere Marshalled over the wire nella loro rappresentazione nativa.

La serializzazione implica la trasformazione dei dati in una rappresentazione intermedia non nativa. Ad esempio: trasformazione di un oggetto Java in JSON o XML.

Naturalmente, la maggior parte dei sistemi che eseguono il marshalling dei dati, li serializzano in un formato non nativo prima di trasportarli.


13

Questa domanda è stata posta prima, ma su StackOverflow. Ecco il link

Citazione della risposta data da Jeffrey Hantin :

Il marshalling e la serializzazione sono vagamente sinonimo nel contesto della chiamata di procedura remota, ma semanticamente diversi per questione di intenti.

In particolare, il marshalling riguarda il trasferimento di parametri da qui a lì, mentre la serializzazione riguarda la copia di dati strutturati da o verso una forma primitiva come un flusso di byte. In questo senso, la serializzazione è un mezzo per eseguire il marshalling, di solito implementando la semantica pass-by-value.

È anche possibile eseguire il marshalling di un oggetto per riferimento, nel qual caso i dati "sul filo" sono semplicemente informazioni sulla posizione dell'oggetto originale. Tuttavia, un tale oggetto potrebbe essere ancora suscettibile di valutare la serializzazione.

Come menziona @Bill, potrebbero esserci metadati aggiuntivi come posizione della base di codice o persino codice di implementazione degli oggetti.


2

Un Marshaller fa tutto ciò che deve fare, per lanciare una struttura di dati da trasportare da un luogo a un altro. Quando parlo di "Struttura dei dati" potrebbe essere qualsiasi cosa. Da un oggetto stesso (dati stato => valori di campo) a un riferimento di memoria a quell'oggetto che verrà gestito sul lato client da uno "Stub" e sul lato server da un "Proxy". Significa che un Marshaller potrebbe usare i "serializzatori" per trasformare quella struttura di dati in una rappresentazione di basso livello molto più facile da trasportare. Il percorso di trasformazione potrebbe avere altri componenti come Compressori, Compilatori, Adattatori ecc. Per me un serializzatore fa parte del Marshaller.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.