Cosa si intende per compatibilità binaria? Qual è la sua importanza durante la serializzazione / deserializzazione in un linguaggio come Java che si occupa di byte code?

3

Nel calcolare cosa si intende per compatibilità binaria ?

L'ho letto nel contesto della serializzazione / deserializzazione che questo processo di serializzazione / deserializzazione dovrebbe essere compatibile con i binari. Cosa significa in questo contesto? In particolare, mi interessa capire il ruolo della compatibilità binaria in un linguaggio come Java che si occupa del codice byte.

Questa citazione proviene da Java efficace:

When a serializable class is revised, it is important to check that it is possible to serialize an instance in the new release and deserialize it in old releases, and vice versa. The amount of testing required is thus proportional to the product of the number of serializable classes and the number of releases, which can be large. These tests cannot be con-structed automatically because, in addition to binary compatibility, you must test forsemantic compatibility. In other words, you must ensure both that the serialization-deserialization process succeeds and that it results in a faithful replica of the original object. The greater the change to a serializable class, the greater the need for testing. The need is reduced if a custom serialized form is carefully designed when the class is first written (Items 75, 78), but it does not vanish entirely.

    
posta Geek 12.06.2013 - 17:31
fonte

1 risposta

5

Significa solo che il deserializzatore deve utilizzare lo stesso formato binario del serializzatore. Ad esempio, considera la serializzazione di una stringa. Esistono diversi formati binari per una stringa, anche se rappresentano semanticamente gli stessi dati. Un modo è innanzitutto serializzare un numero che rappresenta la lunghezza della stringa, quindi scrivere i singoli caratteri. Un altro modo è quello di scrivere i caratteri e usare un carattere null per segnalare la fine della stringa.

Un serializzatore potrebbe usare 16 bit per rappresentare la lunghezza e uno potrebbe usare 32. Se si tratta di una stringa unicode, un serializzatore potrebbe usare la codifica UTF-8, uno potrebbe usare la codifica UTF-16 e uno potrebbe scrivere un campo specificando che codifica sta usando in quella particolare istanza.

È semplicemente qualcosa di semplice e banale come una stringa. Quando arrivi al livello dell'oggetto e più in alto, ci sono molte più varianti per come puoi rappresentare qualcosa in un flusso binario. Se il serializzatore e il deserializzatore non sono compatibili con il codice binario, quando si tenta di deserializzare si otterranno dei problemi.

A volte il formato binario cambia nel tempo, quindi un deserializzatore deve essere a conoscenza di tutti i formati precedenti al fine di rimanere retrocompatibile. I formati serializzati spesso includono un campo versione per questo scopo espresso.

    
risposta data 12.06.2013 - 18:12
fonte

Leggi altre domande sui tag