¿Qué es la serialización?

149

Estoy comenzando con la Programación Orientada a Objetos (OOP) y me gustaría saber: ¿cuál es el significado de la serialización en el lenguaje OOP?

Comunidad
fuente
También eche un vistazo a este artículo que explica por qué no utilizar codeproject de
dotnet
44
Ese artículo es BS completo, de ahí su calificación.
RedAces
¿No es el tipo de preguntas demasiado amplias que generalmente se eliminan, porque una búsqueda en Google daría una respuesta instantánea?
arvymetal
2
@arvymetal tenías razón. Este fue el primer resultado cuando busqué en Google :) Y fue exactamente lo que estaba buscando
R_G

Respuestas:

143

La serialización es el proceso de convertir un objeto en la memoria en una secuencia de bytes para que pueda hacer cosas como almacenarlo en el disco o enviarlo a través de la red.

La deserialización es el proceso inverso: convertir una secuencia de bytes en un objeto en la memoria.

Andrew Barnett
fuente
46
Además, los verbos Marshaly Unmarshalson sinónimos de Serializey Deserialize.
wulfgarpro
44
¿No se representa ya un objeto en la memoria como bytes en el nivel más bajo?
mahacoder
3
El compilador, el sistema operativo y / o el hardware formatearán un objeto en la memoria. Cambia tu compilador y cambias tu formato. Un objeto serializado tendrá un formato definido por su código, por lo que puede garantizar el formato. Esto también es útil al enviar objetos a través de una red: la máquina receptora puede tener una arquitectura completamente diferente (y, por lo tanto, una representación en memoria).
Andrew Barnett
1
¿Entonces lo convierte en una cuerda?
NoName
1
Una cadena puede ser un formato válido, pero no tiene que ser una cadena. Las cadenas en sí tienen diferentes formatos (ASCII, UTF8, UTF16, EBCDIC ...) y en realidad demuestran el concepto bastante bien. La cadena (un objeto en memoria) abcse serializaría como 0x61 0x62 0x63(ASCII) o 0x00 0x61 0x00 0x62 0x00 0x63(UTF16), con o sin elementos como terminadores NUL o longitudes codificadas.
Andrew Barnett
91

Simplemente hablando, la serialización es un proceso de convertir un objeto en una secuencia de bytes para que pueda transferirse a través de una red o almacenarse en un almacenamiento persistente.

La deserialización es exactamente lo contrario: obtenga una secuencia de bytes de la red o del almacenamiento de persistencia y conviértala nuevamente al Objeto con el mismo estado .

Lo que hay que entender es cómo se interpretan o manipulan esos flujos de bytes para que obtengamos exactamente el mismo Objeto / mismo estado. Hay varias formas de lograr eso. Algunos de ellos son -

  1. XML : Convierta Objeto a XML, transfiéralo a través de una red o almacénelo en un archivo / db. Recuperarlo y convertirlo de nuevo al objeto con el mismo estado. En Java utilizamos la biblioteca JAXB (arquitectura Java para enlace XML). (De Java 6 viene incluido con JDK).
  2. JSON : Se puede hacer lo mismo convirtiendo el Objeto a JSON (notación de Objeto JavaScript). Nuevamente, hay una biblioteca GSON que se puede usar para esto.
  3. O podemos usar la serialización que proporciona el lenguaje OOP. Por ejemplo, en Java puede serializar un Object my haciéndolo implementar Serializable interfacey escribiendo en Object Stream.
Aniket Thakur
fuente
@AniketThakur Una muy buena explicación, ¿también puede proporcionarme un enlace para que me JSONentere desde cero, ya que no sé nada al respecto
Kasun Siyambalapitiya
siempre que hablamos de serialización, por qué siempre nos referimos a Objeto solamente. No podemos usar la serialización en lenguaje funcional donde no tenemos ningún objeto en lugar de usar archivos para transferir a través de la red.
Pardeep Sharma
1
En primer lugar, ¿por qué necesitamos convertir un objeto en una secuencia de bytes y viceversa? ¿Por qué no es una operación implícita para un usuario que está tratando de hacer eso?
Aparna Chaganti
1
Si podemos usar JSON o XML, ¿por qué necesitamos o decimos que convertirlos en bytes de flujo? Y luego solo los almacenamos en JSOn o XML en lugar de convertirlos en bytes.
Muhammad Faizan Fareed
78

Explicación simple a través de la imagen:

¡Rex, mi perro, está serializado!

Explicación por analogía:

Supongamos que estoy hablando con mi amigo por teléfono y le estoy contando sobre mi nuevo cachorro.

Aquí está mi problema: el cachorro es un mamífero vivo que respira. ¿Cómo se supone que voy a transmitir un cachorro por la línea telefónica? No puedo poner físicamente a mi cachorro en el receptor de mi teléfono.

Entonces, en cambio, tendré que transmitir una representación del cachorro por teléfono. En otras palabras, luego serializo a mi perro Rex y le envío la versión serializada de Rex a través de la línea telefónica:

{ "name":"Rex", "age":5, "favourite_food": pedigree_choice_cuts, "favourite_game": fetch_ball, "favourite_hobby": wagging_tail }

Es una representación perfecta: una serialización de mi perro.

Resumen:

La serialización básicamente significa transformar mi perro Rex en otra cosa, un objeto JSON, que luego puede transportarse a través de la línea telefónica como una serie de 1s y 0s. Mi amigo en Nueva York puede traducir esos 1s y 0s nuevamente en un objeto JSON, para que tenga una representación perfecta de mi perro Rex.

BKSpurgeon
fuente
16

Mira esto, te dará una buena explicación:

http://en.wikipedia.org/wiki/Serialization

Creo que el uso más común del término serialización tiene que ver con convertir un objeto binario en una representación XML (u otra cadena) para que pueda almacenarse en una base de datos / archivo o enviarse a través de una red en una llamada de servicio web. La deserialización es el proceso inverso: convertir un XML / cadena de nuevo en un objeto.

EDITAR: Otro término con el que te puedes encontrar es ordenar / desarmar. La clasificación es básicamente el mismo concepto que la serialización, y la desorganización es lo mismo que la deserialización.

Andy White
fuente
3
No necesariamente solo XML, puede ser cualquier representación, incluso una representación binaria
Matthew Farwell
7

La serialización es el proceso de convertir un objeto en una secuencia de bytes para almacenar el objeto o transmitirlo a la memoria, una base de datos o un archivo. Su objetivo principal es guardar el estado de un objeto para poder recrearlo cuando sea necesario. El proceso inverso se llama deserialización.

...

Esta ilustración muestra el proceso general de serialización

Proceso general de serialización

...

A través de la serialización, un desarrollador puede realizar acciones como enviar el objeto a una aplicación remota a través de un servicio web, pasar un objeto de un dominio a otro, pasar un objeto a través de un firewall como una cadena XML, o mantener la seguridad o el usuario específico información entre aplicaciones

Desde https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/

(énfasis mío)

Chamin Wickramarathna
fuente
5

La serialización es el proceso de convertir datos no ordenados (como un objeto) en una serie de tokens que se pueden usar más tarde para reconstruir los datos originales. La forma serializada suele ser una cadena de texto, pero no tiene que ser así.

Dave Sherohman
fuente
2

la serialización está convirtiendo un objeto en una secuencia de bits almacenable.

para que pueda guardar esta secuencia en un archivo, db o enviar a través de la red.

luego puede deserializarlo al objeto real y reutilizarlo cuando lo desee.

Web Services y AJAX es el ejemplo más común de serialización. Los objetos se serializan antes de enviar la respuesta al cliente.

Canavar
fuente
1

la serialización no es más que transferir el objeto compatible con Java a un formulario compatible con archivos

                         (OR)

convertir el formulario compatible con Java en un formulario compatible con la red ... el alcance principal de la serialización no es más que transferir los datos de una capa a la otra ... solo objetos serializados que podemos enviar a través de la red ...

sriiii
fuente
1

La serialización es el proceso de convertir un objeto compatible con Java, C # o cualquier otro (lenguajes OOP) en una forma transportable. De esta manera, se transporta a través de la red o se almacena en un disco. Para que una clase sea serializable, debe implementar una interfaz serializable.

Nesan Mano
fuente
no solo se limita a Java o C #, en la mayoría del lenguaje de programación usamos serialización. Por ejemplo, en python el módulo de pickle se usa para lo mismo.
Pardeep Sharma
0

La serialización está convirtiendo los datos en una "cadena" lineal de bytes.

Otros han dicho más o menos lo mismo, pero enfatizo que los modelos de computadora requieren que los datos encajen en la RAM direccionada unidimensionalmente o en el almacenamiento persistente.

La mayoría de las cosas que son "datos" son inherentemente serializables (incluso si debe reducir el modelo abstracto a uno lineal); no serializables son, por ejemplo, una conexión de red o una máquina complicada basada en estado como un analizador sintáctico.

Desbordado
fuente
0

la serialización tiene que ver con convertir un objeto binario en una representación XML (u otra cadena) para que pueda almacenarse en una base de datos / archivo o enviarse a través de una red en una llamada de servicio web. La deserialización es el proceso inverso: convertir un XML / cadena de nuevo en un objeto.

viswanathan
fuente
0

Al crear instancias (construir) el objeto real (la cosa) de una clase (plano) es necesario guardar el objeto (cosa) serializándolo (desglosándolo en su estructura atómica básica) en un espacio en la memoria. (Algo así como Star Treks Transporter). Se divide la cosa en un flujo de información que puede transportarse a algún lugar y almacenarse. Luego, cuando desee reconstruir la cosa, simplemente vuelva a colocar la instancia almacenada atómicamente en el objeto. Diferente de la instaniación.

David K ​​Hill
fuente
0

La serialización es el proceso de convertir un objeto en una secuencia de datos binarios para que pueda almacenarse en un archivo o enviarse a través de una red donde pueda resucitar al mismo objeto.

Este documento debería ayudarlo a comprender la serialización de Java en detalle.

Nikhil Katre
fuente
-1

La serialización es cuando el objeto (un trozo de memoria) se traduce en un formulario cuando el estado del objeto podría guardarse en un archivo (como ejemplo).

Simplemente trátelo como hacer galletas (el objeto es una masa, la galleta) es una masa serializada.

Entonces, al "serializar" puede enviar cookies a su amigo.

Algo como eso :-)

Mr.ElectroNick
fuente
44
... excepto que las cookies no se pueden volver a convertir en masa (deserializada).
Dave Sherohman