¿Cuál es la diferencia entre serialización y marshaling?

Resuelto Peter asked hace 15 años • 13 respuestas

Sé que en términos de varias técnicas distribuidas (como RPC), se utiliza el término "Marshaling", pero no entiendo en qué se diferencia de Serialización. ¿No están ambos transformando objetos en series de bits?

Relacionado:

¿Qué es la serialización?

¿Qué es la clasificación de objetos?

Peter avatar Apr 21 '09 06:04 Peter
Aceptado

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

En particular, la serialización consiste en obtener parámetros de aquí para allá, mientras que la serialización consiste en copiar datos estructurados hacia o desde una forma primitiva, como un flujo de bytes. En este sentido, la serialización es un medio para realizar la clasificación, 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 del objeto original. Sin embargo, un objeto de este tipo aún puede ser susceptible de serialización de valores.

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

Jeffrey Hantin avatar Apr 20 '2009 23:04 Jeffrey Hantin

Ambos hacen una cosa en común: serializar un objeto. La serialización se utiliza para transferir objetos o almacenarlos. Pero:

  • Serialización: cuando serializa un objeto, solo los datos del miembro dentro de ese objeto se escriben en el flujo de bytes; no el código que realmente implementa el objeto.
  • Marshalling: el término Marshalling se utiliza cuando hablamos de pasar objetos a objetos remotos (RMI) . En Marshalling, el objeto está serializado (los datos de los miembros están serializados) + Se adjunta el código base.

Entonces la serialización es parte de la clasificación.

CodeBase es información que le dice al receptor de Object dónde se puede encontrar la implementación de este objeto. Cualquier programa que crea que alguna vez podría pasar un objeto a otro programa que quizás no lo haya visto antes debe configurar el código base, de modo que el receptor pueda saber de dónde descargar el código, si no tiene el código disponible localmente. El receptor, al deserializar el objeto, obtendrá el código base y cargará el código desde esa ubicación.

Nasir Ali avatar Feb 02 '2013 02:02 Nasir Ali

Del artículo de Wikipedia sobre Marshalling (informática) :

El término "mariscal" se considera sinónimo de "serializar" en la biblioteca estándar de Python 1 , pero los términos no son sinónimos en el RFC 2713 relacionado con Java:

"Organizar" un objeto significa registrar su estado y su(s) código(s) base(s) de tal manera que cuando el objeto ordenado se "desordene", se obtenga una copia del objeto original, posiblemente cargando automáticamente las definiciones de clase del objeto. Puede reunir cualquier objeto que sea serializable o remoto. La clasificación es como la serialización, excepto que la clasificación también registra bases de código. La clasificación se diferencia de la serialización en que la clasificación trata especialmente los objetos remotos. (RFC 2713)

"Serializar" un objeto significa convertir su estado en un flujo de bytes de tal manera que el flujo de bytes pueda volver a convertirse en una copia del objeto.

Por lo tanto, la clasificación también guarda el código base de un objeto en el flujo de bytes además de su estado.

Bill the Lizard avatar Apr 20 '2009 23:04 Bill the Lizard

Lo básico primero

Byte Stream : la secuencia es una secuencia de datos. Flujo de entrada: lee datos de la fuente. Flujo de salida: escribe datos en el destino. Java Byte Streams se utiliza para realizar entradas/salidas byte a byte (8 bits a la vez). Un flujo de bytes es adecuado para procesar datos sin procesar, como archivos binarios. Las secuencias de caracteres de Java se utilizan para realizar entradas/salidas de 2 bytes a la vez, porque los caracteres se almacenan utilizando convenciones Unicode en Java con 2 bytes para cada carácter. La secuencia de caracteres es útil cuando procesamos (leemos/escribimos) archivos de texto.

RMI (Invocación de método remoto) : una API que proporciona un mecanismo para crear aplicaciones distribuidas en Java. La RMI permite que un objeto invoque métodos en un objeto que se ejecuta en otra JVM.


Tanto la serialización como la clasificación se utilizan libremente como sinónimos. Aquí hay algunas diferencias.

Serialización : los miembros de datos de un objeto se escriben en formato binario o Byte Stream (y luego se pueden escribir en un archivo/memoria/base de datos, etc.). No se puede conservar ninguna información sobre los tipos de datos una vez que los miembros de datos del objeto se escriben en formato binario.

ingrese la descripción de la imagen aquí

Marshalling : el objeto se serializa (en un flujo de bytes en formato binario) con el tipo de datos + base de código adjunto y luego se pasa al objeto remoto (RMI) . La clasificación transformará el tipo de datos en una convención de nomenclatura predeterminada para que pueda reconstruirse con respecto al tipo de datos inicial.

ingrese la descripción de la imagen aquí

Entonces la serialización es parte de la clasificación.

CodeBase es información que le dice al receptor de Object dónde se puede encontrar la implementación de este objeto. Cualquier programa que crea que alguna vez podría pasar un objeto a otro programa que quizás no lo haya visto antes debe configurar el código base, de modo que el receptor pueda saber de dónde descargar el código, si no tiene el código disponible localmente. El receptor, al deserializar el objeto, obtendrá el código base y cargará el código desde esa ubicación. (Copiado de la respuesta de @Nasir)

La serialización es casi como un estúpido volcado de memoria de la memoria utilizada por los objetos, mientras que Marshalling almacena información sobre tipos de datos personalizados.

En cierto modo, la serialización realiza una clasificación con la implementación del paso por valor porque no se pasa información del tipo de datos, solo se pasa la forma primitiva al flujo de bytes.

La serialización puede tener algunos problemas relacionados con big-endian y small-endian si la transmisión va de un sistema operativo a otro si los diferentes sistemas operativos tienen diferentes medios para representar los mismos datos. Por otro lado, la clasificación está perfectamente bien para migrar entre sistemas operativos porque el resultado es una representación de nivel superior.

Om Sao avatar Jan 02 '2020 06:01 Om Sao