¿Cuál es la diferencia entre un mariscal y un serializador?


20

... y desarmar / deserializar? ¡La explicación de Wikipedia no me deja sabio! Soy un programador de Java, en caso de que la terminología se use de manera diferente en diferentes idiomas.

Respuestas:


30

La semántica es importante aquí:

Marshalling implica mover los datos, no implica transformar los datos de su representación o almacenamiento nativo. Los objetos Java se pueden ordenar por cable en su representación nativa.

Serializar implica transformar los datos en alguna representación intermedia no nativa. Por ejemplo: transformar un objeto Java a JSON o XML.

Por supuesto, la mayoría de los sistemas que contienen datos de Marshal lo serializan a un formato no nativo antes de transportarlo.


13

Esta pregunta ya se ha hecho antes, pero en StackOverflow. Aquí está el enlace.

Cita de la respuesta dada por Jeffrey Hantin :

La clasificación y la serialización son sinónimos en el contexto de la llamada a procedimiento remoto, pero son semánticamente diferentes como una cuestión de intención.

En particular, el cálculo de referencias consiste en obtener parámetros de aquí para allá, mientras que la serialización se trata de copiar datos estructurados ao desde una forma primitiva, como un flujo de bytes. En este sentido, la serialización es un medio para realizar el cálculo de referencias, generalmente implementando una semántica de paso por valor.

También es posible ordenar un objeto por referencia, en cuyo caso los datos "en el cable" son simplemente información de ubicación para el objeto original. Sin embargo, dicho objeto aún puede ser susceptible de serialización de valor.

Como @Bill menciona, puede haber metadatos adicionales, como la ubicación de la base del código o incluso el código de implementación del objeto.


2

Un Marshaller hace lo que sea necesario para lanzar una estructura de datos para ser transportada de un lugar a otro. Cuando hablo de "Estructura de datos" podría ser cualquier cosa. Desde un objeto en sí (datos de estado => valores de campo) hasta una referencia de memoria a ese objeto que será manejado por el lado del cliente por un "Stub" y por el lado del servidor por un "Proxy". Significa que un Marshaller podría usar "serializadores" para transformar esa estructura de datos en una representación de bajo nivel mucho más fácil de transportar. La ruta de transformación podría tener otros componentes como compresores, compiladores, adaptadores, etc. Para mí, un serializador es parte de Marshaller.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.