Guía para la serialización de C ++

Guía para la serialización de C ++
La serialización convierte un objeto en un flujo de bytes que se almacenarán en el disco o se envían a otra computadora a través de una red. Hay dos tipos de objetos en C ++: objetos y objetos fundamentales instanciados desde una clase definida. Nota, en C ++, la estructura se considera una clase, y el nombre de una estructura representa el objeto instanciado de la estructura.

Los objetos fundamentales individuales no están normalmente serializados. Sin embargo, dado que un objeto instanciado tiene objetos fundamentales, ya que todo el objeto es serializado, los objetos fundamentales también se serializan. En C ++, todas las estructuras de datos, como el vector, son clases predefinidas.

La serialización también se llama mariscal. Lo opuesto a la serialización es la deserialización o la desaprobación. El objeto serializado como un archivo desde el disco o la red se puede convertir de nuevo (resucitado) al objeto en la computadora local para ser utilizada con la aplicación local C ++ (programa).

Este artículo lo guía sobre una mejor comprensión de las bibliotecas de serialización de C ++ y cómo escribir su propia biblioteca de serialización. Se centra en la transmisión estándar serializada, JSON - ver a continuación.

Contenido del artículo

  • Transmisión binaria y de texto
  • Objetivos principales
  • Transmisión json
  • Sintaxis json
  • Valor de datos json
  • Comparación de objetos C ++ y JSON
  • Más para saber
  • Conclusión

Transmisión binaria y de texto

Binario
Se dice que un programa C ++ compilado está en forma binaria. Una corriente serializada puede estar en forma binaria. Sin embargo, este artículo no considerará objetos serializados binarios.

Texto
La transmisión serializada puede estar en forma de texto. Dos estándares de texto que se usan hoy en día son JSON y XML. Es más fácil de entender y manejar JSON que comprender y manejar XML. Entonces JSON se usa en este artículo.

Objetivos principales

Los principales objetivos para la serialización son que la corriente serializada debe ser compatible hacia atrás y hacia atrás. También debería ser posible usarse en diferentes sistemas operativos y diferentes arquitecturas de computadora.

Versión
Suponga que ha escrito un programa y lo ha enviado a un cliente, y el cliente está satisfecho. Eso está bien. Más adelante, el cliente necesita modificación. Sin embargo, hoy, el cliente ha empleado a su propio programador. El programador le pide que agregue otra propiedad (miembro de datos) a una clase y envíe los objetivos correspondientes a través de la red. Tiene la intención de encajar el objeto en el programa; Cuando hagas eso, la transmisión serializada tendrá que ser compatible con el objeto antiguo.

La especificación de C ++ y otros idiomas cambian con el tiempo. En algunas especificaciones, se le informa algunos de los cambios que tendrán lugar en las especificaciones próximas y futuras. Normalmente no es posible informarle de todos los cambios que tendrán lugar. Por lo tanto, su transmisión serializada debe ser reenviada, siempre y cuando sean preocupados estos nuevos cambios futuros. La compatibilidad hacia adelante tiene sus límites porque no todos los cambios futuros se pueden determinar.

La compatibilidad hacia adelante y hacia atrás es manejada por el esquema llamado versiones.

Transmisión json

JSON representa la notación de objeto JavaScript.

JSON es un formato de texto para almacenar y transportar datos.

JSON está "autodescripción".

JSON también es un estándar antiguo, por lo que se adapta bien a la serialización y deserialización del texto de C ++. Entonces, para enviar un objeto instanciado de C ++, conviértelo a un objeto JSON y envíe. Justo antes de que se envíe el objeto JSON, se llama transmisión. Cuando se recibe un objeto JSON en su secuencia, todavía se llama flujo para la deserialización.

Sintaxis json

Con JSON, un dato es un par de clave/valor. Por ejemplo, en

"Nombre": "Smith"

el nombre es una clave, y Smith es el valor. Un objeto es delimitado por aparatos ortopédicos, como en:

"Nombre": "Smith", "Altura": 1.7

Los datos están separados por comas. Cualquier texto, ya sea una clave o un valor, debe estar en quotas dobles. Los números se escriben sin cotizaciones.

Una matriz es delimitada por los soportes cuadrados como en:

["Naranja", "Banana", "pera", "limón"]

En el siguiente código, hay un dato cuyo valor es una matriz e identificada por ARR

"arr": ["naranja", "plátano", "pera", "limón"]

NOTA: Los objetos se pueden anidar en JSON, y con eso, se pueden identificar objetos.

Valor de datos json

El posible valor del dato de JSON es:

  • una cuerda
  • un número
  • un objeto
  • una matriz
  • un booleano
  • nulo
  • una función (pero en quotas dobles)

Una fecha de C ++ o cualquier otro objeto que no esté en esta lista debe convertirse en una cadena literal para convertirse en un valor JSON.

Comparación de objetos C ++ y JSON

El siguiente es un programa C ++ simple con un objeto simple, de constructor predeterminado:

#incluir
usando el espacio de nombres STD;
Clase THECLA

público:
int num;
int mthd (int it)

devolverlo;

;
int main ()

THECLA OBJ;
int no = obj.MTHD (3);
cout << no << endl;
regresar 0;

El objeto JSON equivalente es el siguiente:

"obj": "num": null, "mthd": "int mthd (int it) return it;"

Un objeto JSON es, por definición, serializado.

Tenga en cuenta cómo se ha indicado el nombre del objeto. Además, tenga en cuenta cómo se ha indicado el nombre de la función. En el extremo receptor, el programa C ++ allí para la deserialización tendrá que convertir esto en una clase y objeto C ++ y luego compilar. El programa también tendrá que reconocer la función en forma de cadena, eliminar las cotizaciones dobles y tener la función como texto antes de compilar.

Para facilitar esto, se deben enviar metadatos. Los metadatos son datos sobre datos. Se puede enviar un mapa C ++ con los metadatos. Un mapa es un objeto C ++ en sí, que tendrá que convertirse en un objeto JSON. Se enviará, seguido del objeto de interés JSON.

El objeto json es un objeto de transmisión. Después de que se haya preparado, debe enviarse al objeto Ostrream C ++ para que se guarde como un archivo o se envíe a través de la red. En la computadora receptora, el C ++ istream recibirá la secuencia. Luego será tomado por el programa de deserialización que reproducirá el objeto en formato C ++. Ostrream y Istream son objetos de C ++ Fstream.

Nota: En JavaScript (ECMAScript), se llama la serialización, la ciclo y la deserialización se denomina análisis.

Objeto json y objeto JavaScript

El objeto JSON y el objeto JavaScript son similares. El objeto JavaScript tiene menos restricciones que el objeto JSON. El objeto JSON fue diseñado a partir del objeto JavaScript, pero hoy en día, puede ser utilizado por muchos otros lenguajes de computadora. JSON es el archivo más común (secuencia serializada) utilizado para enviar datos entre los servidores web y sus clientes. Las bibliotecas C ++ usan JSON, pero ninguno de ellos satisface la mayoría de los objetivos de producir un archivo para C++.

Nota: En JavaScript, una función no es una cadena. Cualquier función recibida como una cadena se convierte en una función de sintaxis normal.

Más para saber

Además de conocer lo anterior, para producir una biblioteca de serialización o deserialización para usted, también debe saber:

  • Cómo expresar punteros de C ++ a objetos en formato JSON;
  • Cómo expresar la herencia de C ++ en formato JSON;
  • Cómo expresar el polimorfismo C ++ en formato JSON; y
  • Más sobre JSON.

Conclusión

La serialización convierte un objeto en un flujo de bytes que se almacenarán en el disco o se envían a otra computadora a través de una red. La deserialización es el proceso invertido para la corriente serializada, que se llama archivo.

Tanto los objetos fundamentales como los objetos instanciados se pueden serializar. Los objetos fundamentales únicos apenas se serializan. Sin embargo, dado que un objeto instanciado tiene objetos fundamentales, los objetos fundamentales se serializan junto con todo.

La serialización tiene una desventaja de que expone miembros privados del objeto C ++. Este problema se puede resolver haciendo serialización en binario. Con el texto, se pueden enviar metadatos para indicar a los miembros privados; Pero el programador en el otro extremo aún puede conocer a los miembros privados.

Es posible que ya haya guardado en el disco o haya enviado un programa de código binario o fuente a través del correo electrónico, y es posible que se pregunte: por qué guardar o enviar solo el objeto. Bueno, en C ++, es posible que se haya dado cuenta de que una biblioteca completa puede consistir en solo una clase, posiblemente con cierta herencia. La clase podría ser más larga que muchos programas cortos de C ++. Entonces, una razón para enviar objetos es porque algunos objetos son demasiado grandes. La programación orientada a objetos (OOP) implica la interacción de objetos, similar a la forma en que interactúan los animales, las plantas y las herramientas. Otra razón es que OOP está mejorando, y los programadores prefieren tratar con objetos que toda la aplicación, que puede ser demasiado grande.

C ++ aún no tiene un formato de archivo estándar para texto o binario, aunque existen bibliotecas de serialización para la serialización y deserialización de C ++. Ninguno de ellos es realmente satisfactorio. El formato de archivo de texto para JavaScript es JSON. JSON se puede usar con cualquier idioma de computadora. Entonces, con la guía anterior, debería poder producir su propia biblioteca para el mariscal de C ++ y la soltera.