Qual é a diferença entre um empacotador e um serializador?

20

... e desserializar / desserializar? A explicação da Wikipedia me deixa nem um pouco mais sábio! Sou programador Java, caso a terminologia seja usada de maneira diferente em diferentes linguagens.

espuma
fonte

Respostas:

30

A semântica é importante aqui:

Marshalling implica mover os dados, não implica transformar os dados de sua representação ou armazenamento nativo. Objetos Java podem ser Marshalled over the wire em sua representação nativa.

Serializar implica transformar os dados em alguma representação intermediária não nativa. Por exemplo: transformando um objeto Java em JSON ou XML.

Obviamente, a maioria dos sistemas com dados Marshal os serializa em algum formato não nativo antes de transportá-los.

JimmyJames
fonte
13

Esta pergunta já foi feita antes, mas no StackOverflow. Aqui está o link.

Citação da resposta dada por Jeffrey Hantin :

Marshaling e serialização são vagamente sinônimos no contexto da chamada de procedimento remoto, mas semanticamente diferentes por uma questão de intenção.

Em particular, empacotamento é obter parâmetros daqui para lá, enquanto serialização envolve copiar dados estruturados para ou de uma forma primitiva, como um fluxo de bytes. Nesse sentido, a serialização é um meio de realizar empacotamento, geralmente implementando a semântica de passagem por valor.

Também é possível que um objeto seja empacotado por referência; nesse caso, os dados "no fio" são simplesmente informações de localização do objeto original. No entanto, esse objeto ainda pode ser passível de valorizar a serialização.

Como o @Bill menciona, pode haver metadados adicionais, como localização da base de código ou mesmo código de implementação de objeto.

alegen
fonte
2

Um Marshaller faz o que for necessário para lançar uma estrutura de dados a ser transportada de um lugar para outro. Quando eu falo sobre "Estrutura de dados", pode ser qualquer coisa. De um objeto em si (dados do estado => valores do campo) a uma referência de memória a esse objeto que será tratado no lado do cliente por um "Stub" e no lado do servidor por um "Proxy". Isso significa que um Marshaller poderia usar "Serializadores" para transformar essa estrutura de dados em uma representação de baixo nível, muito mais fácil de transportar. O caminho da transformação pode ter outros componentes, como compressores, compiladores, adaptadores etc. Para mim, um serializador faz parte do Marshaller.

HABOT QDroid
fonte