Autor Tema: Introducción a la serialización  (Leído 1856 veces)

JaviCepa

  • Socio
  • Mega Jammer
  • ****
  • Mensajes: 433
  • Molas: 45
    • @JaviCepa
Introducción a la serialización
« en: 05 de Agosto de 2015, 12:40:07 pm »
¡Hablemos de serialización!

¿Qué es serializar?: serializar es poner cosas distintas una detrás de otra en un orden fijo. Hacemos esto para que cuando volvamos a buscarlas sepamos qué tipo de cosa hemos puesto con los ojos cerrados.

¿Qué es parsear?: para los fines introductorios de este post, vamos a decir que es lo contrario de serializar, es decir, procesar una cadena de texto para recuperar la información que serializamos previamente.

¿Qué tipo de cosas?: en programación normalmente objetos, pero también traducciones, diálogos...

Aplicaciones: serializar datos te puede servir para
  • Crear un sistema de guardar/cargar partida
  • Crear un sistema de diálogos
  • Automatizar la importación de assets
  • Crear un sistema de guardado/reproducción de repeticiones (dependiendo mucho del tipo de juego)

Ejemplo de "serialización custom": quiero guardar las traducciones de mi texto "Hola" en un archivo y pasarle ese archivo al traductor para que traduzca mi juego al japonés, ruso y chino. Me invento un formato de archivo "serializado" de esta forma:
Código: [Seleccionar]
WelcomeText: Hola,Bonjour,Hello,[Japanese],[Russian],[Chinese]
GoodByeText: Adiós,Au Revoir,Bye,[Japanese],[Russian],[Chinese]
Y se lo mando al traductor, enfatizando que respete los caracteres de separación (la coma no es para nada una buena elección como caracter clave de separación, pero bueno, es un ejemplo :P).

Si defino bien el formato, luego puedo parsearlo separando los valores por caracteres clave (los dos puntos, las comas y el cambio de línea).

Esta sería una primera aproximación a lo que es la serialización.

Ahora bien, hay formas mejores de hacer esto y formatos ya establecidos.

Formatos comunes de serialización:
CSV: parecido al del ejemplo anterior, pero con solo dos caracteres de separación (la coma y el cambio de linea normalmente). Útil cuando queremos serializar una estructura de datos que no se ramifica con un formato sencillo y bastante legible.
XML: uno de los más extendidos. Es muy parecido al HTML, pero con nombres de etiqueta personalizados. Soporta estructuras arboladas, por lo que es adecuado para uso general, además tiene soporte nativo en C#/.NET
JSON: la otra alternativa más popular, JavaScript Object Notation. Básicamente consiste en escribir los datos como se hace en javascript (lo que facilita mucho la integración en este lenguaje, pero también hay librerías para hacerlo en otros sin problema).

El tema es extenso, pero para una introducción creo que con esto vale :) Espero que os sea útil

BONUS TRACK: protobuf, una librería súper optimizada y ligera para serializar datos de forma binaria en C#. Aquí hay info sobre cómo implementarla en Unity.

Elena

  • Socio
  • Super Jammer
  • ***
  • Mensajes: 160
  • Molas: 23
Re:Introducción a la serialización
« Respuesta #1 en: 23 de Agosto de 2015, 12:30:05 pm »
¡Genial post Javi! Este tema es muy útil e interesante. ¿Alguna web donde mirar este tema de forma avanzada? :)

HHErebus

  • @hherebus
  • Socio
  • New Jammer
  • *
  • Mensajes: 46
  • Molas: 10
    • The Immortal Hydra
Re:Introducción a la serialización
« Respuesta #2 en: 23 de Agosto de 2015, 01:02:30 pm »
Por cierto para quien trabaje en Unity, aquí un artículo sobre como funciona la serialización en aquél motor!

JaviCepa

  • Socio
  • Mega Jammer
  • ****
  • Mensajes: 433
  • Molas: 45
    • @JaviCepa
Re:Introducción a la serialización
« Respuesta #3 en: 24 de Agosto de 2015, 03:45:45 pm »
¡Genial post Javi! Este tema es muy útil e interesante. ¿Alguna web donde mirar este tema de forma avanzada? :)

Ninguno en concreto pero si googleas salen un montón de recursos sobre el tema :)

JavierOrtiz

  • Jammer
  • **
  • Mensajes: 86
  • Molas: 8
Re:Introducción a la serialización
« Respuesta #4 en: 26 de Agosto de 2015, 06:53:56 pm »
Muy interesante lo de la serialización, voy a tener que estudiarlo con más tiempo jaja, que como soy novato en programación estas cosas me lleva un tiempo digerirlas xD