2011-09-28 7 views
12

Duplicar posible:
Boost Serialization Library upgrade¿La biblioteca de serialización binaria boost de C++ es compatible con versiones anteriores?

Estoy tratando de encontrar una solución de serialización para una aplicación C++. Realmente me gustaría poder usar la serialización binaria boost. Si tuviera que serializar un objeto usando una versión anterior de la biblioteca de serialización binaria de refuerzo, ¿una aplicación que esté usando una versión más reciente de la biblioteca de impulso siempre podrá leerla? ¿Qué hay de viceversa? ¿Cuál es la filosofía de impulso hacia atrás/compatibilidad en la biblioteca de serialización?

+2

Sería un duplicado, pero no tiene una respuesta satisfactoria. – julkiewicz

+0

@julkiewicz sí, además OP aún no está en posición de ofrecer una recompensa por la pregunta existente. –

+0

Uh, ¿por qué está cerrado si no hay un buen duplicado? –

Respuesta

10

Lo hacen incrementando la versión en el encabezado. Así que sí, es compatible en cierto sentido que obtendrá una falla elegante si intenta leer datos binarios serializados con una versión incompatible, como suele indicar el 1.45.0 release notes. ¡Además hay errores en 1.42 y 1.43 que lo rompen!

Los archivos binarios nativos creados en las versiones 1.42 y 1.43 tienen un problema grave. Es probable que esta última versión no los pueda leer. Esto debido al hecho de que 1.42 hizo algunos cambios en el formato binario de algunos tipos. Normalmente, esto podría abordarse detectando el número de versión de la biblioteca escrito en el encabezado del archivo. Desafortunadamente, este número de versión de la biblioteca no se incrementó en 1.42 como debería haber sido. Entonces ahora tenemos dos versiones de archivo binarias diferentes con el mismo número de versión de la biblioteca.

yo personalmente pondría más fe en Google Protocol Buffers, que explicitly maintains backwards compatibility:

Puede añadir nuevos campos a los formatos de mensaje sin romper la compatibilidad con versiones anteriores; los binarios antiguos simplemente ignoran el nuevo campo al analizar.

sin embargo, requiere un poco más de esfuerzo en el lado sistema de construcción, ya que implica el uso de código generado automáticamente.

+0

+1 para sus opiniones: P –

+0

Boost.serialization también permite versionar sus datos (aunque es cierto que es un poco menos "mágico"); sin embargo, mientras que las diferentes versiones de boost.serialization pueden usar un formato de cable diferente para la definición de la clase _same_, el formato de cable de protobufs se publica y no parece cambiar. – bacar

+0

@Alex B, ¿sería aconsejable utilizar GPB como formato de documento donde el tamaño total del objeto está entre 30 MB y 1 GB? –

Cuestiones relacionadas