2011-08-28 9 views
5

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?

+1

Potreste scoprire che questo interessante di voi è preoccupato per la velocità. http://vanillajava.blogspot.com/2011/08/avoiding-java-serialization-to-increase.html –

+0

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 –

+0

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

risposta

6

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.

+0

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. –

+3

@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. –

4

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.

2

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.