Sono stato avvisato di non utilizzare le raccolte immutabili di Guava negli oggetti utilizzati nelle comunicazioni serializzate perché se la versione di Guava su un'estremità è stata aggiornata, potrebbero esserci problemi di incompatibilità della versione di serializzazione. È una preoccupazione valida?La serializzazione delle collezioni immutabili Guava è stabile?
risposta
Sì, è un problema valido.
Dalla home page del progetto Guava (http://code.google.com/p/guava-libraries/):
forme serializzati di tutti gli oggetti sono soggetti a modifiche. Non persistere e presumere che possano essere letti da una versione futura della libreria.
Se si utilizza la serializzazione nativa Java, Guava non è una buona scelta.
Solo "non è una buona scelta" se non è possibile controllare quale versione viene utilizzata su entrambi i lati della comunicazione. – SteveD
Che schifo. Le collezioni immutabili dovrebbero essere stabili ormai. Perché dovrebbero cambiare i moduli serializzati? –
Mantenere la compatibilità di serializzazione tra diverse versioni di strutture di dati è davvero difficile. Vedi alcuni dei messaggi successivi in questo [thread di mailing list] (https://groups.google.com/group/guava-discuss/browse_thread/thread/eae0b4232496d2b3/020c9f58640f2263) per alcuni dei motivi. –
Diamo una prospettiva.
Gli usi più importanti di serializzazione sono:
- memorizzare i dati in tra le piste della vostra applicazione
- l'invio di dati tra un client e un server
Guava è totalmente soddisfacente per l'applicazione 2 , se si controlla quale versione di Guava viene utilizzata sia sul client che sul server. Inoltre, mentre Guava non offre garanzie sulla coerenza della serializzazione tra le versioni di Guava ... in realtà, le forme serializzate non cambiano molto spesso.
D'altra parte, vorrei dare qualche prospettiva sul motivo per cui Guava non garantisce la coerenza delle forme serializzate. Ho cambiato la forma serializzata di ImmutableMultiset tra le versioni 9 e 10 di Guava, e il motivo per cui è stato perché avevo bisogno di refactoring, così ho potuto aggiungere ImmutableSortedMultiset alle collezioni immutabili. Puoi vedere tu stesso il cambiamento here. Provare a fare questo stesso refactoring mantenendo le forme serializzate coerenti avrebbe quasi certamente richiesto altri hack complicati, che sono ... piuttosto fortemente contro la filosofia del team Guava. (Potrebbe essere stato possibile da un programmatore più esperto di me, ma continuo a sostenere che non sarebbe stato banale.) Garantire la compatibilità della serializzazione a lungo termine avrebbe richiesto enormi sforzi, come discusso nello above linked mailing list thread, ha affermato Kevin :
Cercando di prevedere cross-versione di compatibilità cose fatte un centinaio di volte più difficili e abbiamo rinunciato su di esso prima Guava neanche iniziato.
e Jared:
Il problema di fondo è ancora lì: assicurare che le forme serializzati sono compatibili tra tutte le versioni Guava. Questo era un mio obiettivo quando lavorava verso Google Collections 1.0, ma ho abbandonato quell'obiettivo dopo lo rendendoci conto della sua difficoltà. Implementare e testare la compatibilità cross-version non valeva la pena.
Infine, sottolineerò che Guava viene utilizzato internamente a Google in tutto il luogo e gestisce piuttosto bene.
- 1. personalizzazione serializzazione delle collezioni Java utilizzando xstream
- 2. Come rendere le collezioni immutabili di Scala detenere oggetti immutabili
- 3. Collezioni Guava: limite di dimensione permutazione
- 4. L'ordinamento scala è stabile?
- 5. Micro benchmark per il confronto di collezioni mutabili e immutabili Scala con java.util.concurrent * collezioni
- 6. Come omettere collezioni vuote durante la serializzazione con Json.NET
- 7. Come fare json.Net saltare la serializzazione di collezioni vuote
- 8. più codice "funzionale" Making a Scala per utilizzare collezioni immutabili
- 9. Serializzazione veloce/deserializzazione delle strutture
- 10. Serializzazione di classi java immutabili all'actioncript con LCDS
- 11. Quanto è stabile la lingua dell'assemblaggio LLVM?
- 12. Meteor.js è abbastanza stabile per la produzione?
- 13. Perché la selezione non è stabile?
- 14. Quanto è stabile NSubstitute?
- 15. Come impedire la serializzazione delle proprietà autoattive?
- 16. Problemi di serializzazione Java durante l'utilizzo di guava Lists.transform
- 17. La serializzazione XML è lenta
- 18. Quanto è stabile dokan sshfs?
- 19. Lombok @ Getter e copie delle collezioni
- 20. Ci sono delle panoramiche su guava?
- 21. Perché la serializzazione binaria è più veloce della serializzazione xml?
- 22. L'ordinamento è stabile in Ruby?
- 23. Guava cache e conservazione delle eccezioni controllate
- 24. Serializzazione e controllo delle versioni
- 25. La deforestazione in collezioni Scala
- 26. Serializzazione delle eccezioni su WCF
- 27. mutable vs. immutable nelle collezioni Scala
- 28. Perché tutte le collezioni immutabili di base sono finali o sigillate in scala?
- 29. La funzione sorted() di python è garantita per essere stabile?
- 30. La seconda parte della mappa è <..,..> stabile?
Questo può essere un problema con qualsiasi classe: si desidera che le versioni della libreria siano le stesse sul lato di invio e di destinazione. – SteveD