Dopo aver esaminato l'articolo http://geekexplains.blogspot.com/2008/06/diff-between-externalizable-and.html, ho capito che Externalizable è meglio di Serializalable in quanto fornisce un controllo migliore sul codice e anche più veloce. Come External dovrebbe essere preffered invece di Serializable la definizione della classe fornita non è cambiata. Ma quando vedo in qualsiasi progetto che trovo utilizzando solo l'interfaccia serializzabile. può essere ignoranza o Serializalable fornisce qualche altro vantaggio che mi manca?Externalizable or Serializable?
risposta
Il vantaggio di Serializable è che è incredibilmente facile da implementare e resiliente al cambiamento (nella maggior parte dei casi tutto ciò che dovete fare è aggiornare serialversionUID). Externalizable richiede che il programmatore lavori effettivamente e faccia più lavoro ogni volta che cambia il contenuto della classe. Poiché l'articolo a cui si fa riferimento evidenzia l'implementazione di Externalizable è anche soggetto a errori. Quindi dal punto di vista dell'utilizzo del tempo limitato del programmatore, spesso Serializable è una scelta migliore.
La cosa positiva di come sono progettati Serializable ed Externalizable è che è possibile rinviare la decisione di implementare Externalizable fino a quando non diventa evidente che c'è un problema di prestazioni, e si può implementarlo in modo selettivo solo per quelle classi in cui c'è un problema.
Concordato che Serializable è incredibilmente facile da implementare. Ma è anche più lento di Externalizable. Come ho detto se la definizione della classe non cambia, dovremmo andare con Externalizable secondo i miei calcoli. Proprio perché è facile da implementare a scapito delle prestazioni non è il modo in cui dovremmo cercare sshould. –
@Mohit: c'è più alla programmazione che alle prestazioni. se qualcosa non è un collo di bottiglia, ottimizzarlo è una perdita di tempo. Supponiamo che tu abbia una webapp in cluster con oggetti di dominio serializzabili che devono andare nella sessione, i nodi sono collegati con una rete ad alta velocità, la micro-ottimizzazione della loro serializzazione potrebbe non ripagare. –
Serializable
è un'interfaccia marker che indica che le istanze possono essere scritte su un flusso di output e rilette. Non è necessario scrivere e codificare (è sufficiente assicurarsi che tutti i campi siano essi stessi Serializable
).
Externalizable
è un Serializable
che fornisce un codice personalizzato (de) serializzazione.
ho avuto modo di conoscere Externalizable è meglio che Serializalable
Tale legame non dice questo. Non c'è un "migliore" in questa situazione, sono i cavalli per i corsi. Se sei pronto a scrivere molto più codice, continuamente per tutta la durata del progetto, Externalizable potrebbe essere "migliore" in alcuni sensi, ad es. costi di spazio e tempo. Se il costo del codice è un problema, Serializable è molto meglio. E queste non sono le uniche alternative.
- 1. Perché l'implementazione di Externalizable richiede un costruttore pubblico predefinito?
- 2. Genera Java Externalizable readExternal()/writeExternal() blocca automaticamente
- 3. c'è una differenza tra [Serializable] e [Serializable()] in C#?
- 4. miscelazione MarshalByRefObject e Serializable
- 5. generici Java e Serializable
- 6. Perché ActionSupport implementa Serializable
- 7. Quando dovremmo implementare un'interfaccia Serializable?
- 8. java.io.NotSerializableException anche se implemento "Serializable"
- 9. $ (this) OR event.target OR var input = $ (this)
- 10. Penalità per implementare Serializable in Java?
- 11. L'utilizzo di Serializable in Android è scorretto?
- 12. Libreria di classi portatile .NET [Serializable] Attributo
- 13. Scala caso Classe prodotto allungabile con Serializable
- 14. Java Serializable Object to Byte Array
- 15. Passaggio di dati tramite intent utilizzando Serializable
- 16. mediante l'attributo XmlArrayItem senza XmlArray su Serializable classe C#
- 17. Output '{' or '}' con string.format (...)
- 18. cakephp OR condition
- 19. Istruzione [Multi] DataTrigger "OR"?
- 20. Mysql "where" e "or"
- 21. Enums or Tables?
- 22. CQL Cassandra operatore OR
- 23. LinqToXml OR Xml?
- 24. LINQ DOVE con OR
- 25. condizione OR in Regex
- 26. Alternativa all'istruzione OR
- 27. Filtri Log4Net "OR"
- 28. Message Queue or Scheduler
- 29. double free or corruption
- 30. Spark: Task non Serializable per UDF su dataframe
Potreste scoprire che questo interessante di voi è preoccupato per la velocità. http://vanillajava.blogspot.com/2011/08/avoiding-java-serialization-to-increase.html –
Ho tracciato un benchmark confrontando varie opzioni di serializzazione qui: http: // java-is-the-new- c.blogspot.de/2013/10/still-using-externalizable-to-get.html –
L'unico caso in cui 'Serializable' salva il codice su' Externalizable' è quando tutti i campi di istanza non-'transient' di una classe sono una buona rappresentazione logica di esso. In caso contrario, accettare la serializzazione predefinita può costare molto più tempo per il codice e la manutenzione a lungo termine che se si usasse 'Externalizable' per progettare in primo luogo una buona forma seriale. – scottb