Pregunta

¿Hay alguna buena biblioteca de serialización en C ++ que sea compatible con la serialización parcial?

Por " serialización parcial " Quiero decir que podría querer guardar los valores de 3 miembros específicos, y luego poder aplicar esa copia guardada a una instancia diferente. Solo actualizaría esos 3 miembros y dejaría a los otros intactos.

Esto sería útil para sincronizar datos a través de una red. Supongamos que tengo algún objeto en un cliente y un servidor, y cuando un miembro cambia en el servidor, deseo enviar al cliente un mensaje que contenga el valor actualizado para ese miembro y ese miembro solo . No quiero enviar una copia de todo el objeto a través del cable.

boost :: serialization de un vistazo se parece a solo soporta todo o nada.

Edit: 3 años después de haber escrito originalmente esto, lo miro y me dije: '¿qué?' boost :: serialización le permite definir qué miembros desea guardar o no, por lo que admitiría una "serialización parcial" como parece que lo he descrito. Además, dado que C ++ carece de la reflexión, las bibliotecas de serialización requieren que especifique explícitamente cada miembro que está guardando de todos modos, a menos que vengan con algún tipo de herramienta externa para analizar los archivos de origen o tengan un formato de archivo de entrada separado que se use para generar el código C ++ (por ejemplo, lo que hace Protocol Buffers). Creo que debo haber estado confundido conceptualmente cuando escribí esto.

¿Fue útil?

Solución

Claramente, no estás buscando una serialización aquí.

La serialización consiste en guardar un objeto y luego recrearlo a partir de la corriente de bytes. Creo que los videojuegos se guardan o el contexto de la sesión para un servidor web.

Aquí lo que necesitas es un mensaje. FlatBuffers de Google es bueno para eso. Especifique un mensaje que contendrá todos los campos como opcional, al recibir el mensaje, actualice su objeto con los campos que existen y deje los otros intactos.

Lo bueno de FlatBuffers es que maneja la compatibilidad hacia adelante y hacia atrás muy bien, así como el texto y la codificación binaria (el texto es excelente para la depuración y el binario para el rendimiento puro), además de un paso de análisis de costo cero.

¡Y puedes incluso decodificar los mensajes con otro idioma (por ejemplo, python o ruby) si los guardas en algún lugar y quieres juntar una gui html para inspeccionarla!

Otros consejos

Aunque no estoy familiarizado con ellos, también puede consultar Google Protocol Buffers .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top