2011-09-28 14 views
12

Eventuali duplicati:
Boost Serialization Library upgradeLa libreria di serializzazione binaria C++ boost è compatibile con le versioni precedenti/future?

Sto cercando di trovare una soluzione di serializzazione per un'applicazione C++. Mi piacerebbe davvero essere in grado di utilizzare la serializzazione binaria boost. Se dovessi serializzare un oggetto utilizzando una versione precedente della libreria di serializzazione binaria di boost, sarà sempre in grado di leggerlo un'applicazione che utilizza una versione più recente della libreria di boost? Che dire del contrario? Qual è la filosofia di boost sulla retrocompatibilità/compatibilità nella libreria di serializzazione?

+2

Sarebbe un duplicato, ma non ha una risposta soddisfacente. – julkiewicz

+0

@julkiewicz sì, più OP non è ancora nella posizione di offrire una taglia sulla domanda esistente. –

+0

Uh, perché è chiuso se non c'è un duplicato valido? –

risposta

10

Lo fanno incrementando la versione nell'intestazione. Quindi sì, è compatibile in un senso che si otterrà un errore grazioso se si tenta di leggere i dati binari serializzati con la versione incompatibile come 1.45.0 release notes tendono a indicare. Inoltre ci sono bug in 1.42 e 1.43 che lo rompono!

nativi archivi binari creati con le versioni 1.42 e 1.43 soffrono di un problema serio. È probabile che non saranno leggibili da quest'ultima versione. Ciò a causa del fatto che 1.42 ha apportato alcune modifiche nel formato binario di alcuni tipi. Normalmente questo può essere risolto rilevando il numero di versione della libreria scritto nell'intestazione dell'archivio. Sfortunatamente, questo numero di versione della libreria non è stato incrementato a 1,42 come avrebbe dovuto essere. Quindi ora abbiamo due diverse versioni di archivio binario con lo stesso numero di versione della libreria.

io personalmente avrebbe messo più fiducia in Google Protocol Buffers, esso explicitly maintains backwards compatibility:

È possibile aggiungere nuovi campi al formati di messaggio senza rompere retrocompatibilità; i vecchi binari ignorano semplicemente il nuovo campo durante l'analisi.

Tuttavia, è necessario un po 'più di sforzo sul lato del sistema di compilazione poiché comporta l'uso di codice generato automaticamente.

+0

+1 per le vostre opinioni: P –

+0

Boost.serialization consente anche di eseguire il controllo della versione dei dati (sebbene, ammettiamolo, sia un po 'meno "magico"); tuttavia, mentre diverse versioni di boost.serialization possono utilizzare un diverso formato wire per la definizione della classe _same_, il formato wire di protobuf viene pubblicato e non sembra cambiare. – bacar

+0

@Alex B, sarebbe consigliabile utilizzare GPB come formato di documento in cui la dimensione totale dell'oggetto è compresa tra 30 MB e 1 GB? –

Problemi correlati