Qual è lo scopo della serializzazione in Java?


Ho letto un certo numero di articoli sulla serializzazione e su come sia così bello e fantastico, ma nessuno degli argomenti era abbastanza convincente. Mi chiedo se qualcuno possa davvero dirmi cos'è che possiamo davvero ottenere serializzando una classe?

Author: fad3d, 2010-02-10

8 answers

Definiamo prima la serializzazione, quindi possiamo parlare del perché è così utile.

La serializzazione sta semplicemente trasformando un oggetto esistente in un array di byte. Questa matrice di byte rappresenta la classe dell'oggetto, la versione dell'oggetto e lo stato interno dell'oggetto. Questo array di byte può quindi essere utilizzato tra le JVM che eseguono lo stesso codice per trasmettere/leggere l'oggetto.

Perché dovremmo farlo?

Ci sono diversi motivi:

  • Comunicazione: Se si dispone di due macchine che eseguono lo stesso codice e devono comunicare, un modo semplice è per una macchina creare un oggetto con le informazioni che desidera trasmettere e quindi serializzare quell'oggetto sull'altra macchina. Non è il metodo migliore per la comunicazione, ma ottiene il lavoro fatto.

  • Persistenza: se si desidera memorizzare lo stato di una particolare operazione in un database, può essere facilmente serializzato su un array di byte e memorizzato nel database per una successiva recupero.

  • Copia profonda: se hai bisogno di una replica esatta di un oggetto e non vuoi andare alla briga di scrivere la tua classe specializzata clone (), semplicemente serializzando l'oggetto su un array di byte e quindi de-serializzandolo su un altro oggetto raggiunge questo obiettivo.

  • Caching: in realtà solo un'applicazione di quanto sopra, ma a volte un oggetto richiede 10 minuti per la compilazione, ma impiegherebbe solo 10 secondi per de-serializzare. Quindi, piuttosto che aggrapparsi al oggetto gigante in memoria, basta memorizzarlo in un file tramite serializzazione e leggerlo in seguito quando è necessario.

  • Sincronizzazione cross JVM: la serializzazione funziona su diverse JVM che possono essere in esecuzione su architetture diverse.

 166
Author: Schmelter, 2010-02-09 21:56:34

Mentre si esegue l'applicazione, tutti i suoi oggetti sono memorizzati in memoria (RAM). Quando esci, quella memoria viene recuperata dal sistema operativo e il tuo programma essenzialmente "dimentica" tutto ciò che è accaduto mentre era in esecuzione. La serializzazione risolve questo problema consentendo all'applicazione di salvare gli oggetti su disco in modo che possa leggerli al successivo avvio. Se la tua applicazione fornirà un modo per salvare / condividere uno stato precedente, avrai bisogno di una qualche forma di serializzazione.

 50
Author: Gordon Gustafson, 2014-05-19 17:56:00

Posso condividere la mia storia e spero che darà alcune idee perché la serializzazione è necessaria. Tuttavia, le risposte alla tua domanda sono già notevolmente dettagliate.

Ho avuto diversi progetti che hanno bisogno di caricare e leggere un sacco di file di testo. I file contenevano parole di arresto, verbi biomedici, abbreviazioni biomediche, parole semanticamente collegate tra loro, ecc. Il contenuto di questi file è semplice: parole !

Ora per ogni progetto, avevo bisogno di leggere le parole da ciascuno di questi file e metterli in diversi array; come il contenuto del file non è mai cambiato, è diventato un comune, tuttavia ridondante, compito dopo il primo progetto.

Quindi, quello che ho fatto è che ho creato un oggetto per leggere ciascuno di questi file e per popolare singoli array (variabili di istanza degli oggetti). Poi ho serializzato gli oggetti e poi per i progetti successivi, li ho semplicemente deserializzati. Non ho dovuto leggere i file e popolare gli array ancora e ancora.

 19
Author: Rushdi Shams, 2015-09-10 06:42:09

In essense:

La serializzazione è il processo di conversione di un insieme di istanze di oggetti che contengono riferimenti l'uno all'altro in un flusso lineare di byte, che può quindi essere inviato attraverso una presa, memorizzati in un file, o semplicemente manipolato come un flusso di dati

Vedere usi da Wiki:

La serializzazione presenta una serie di vantaggi. Esso fornisce:

  1. un metodo di oggetti persistenti che è più conveniente che scrivere le loro proprietà in un file di testo su disco, e ri-assemblaggio di loro da rileggo questo.
  2. un metodo di emissione di chiamate di procedura remota, ad esempio, come nel SAPONE
  3. un metodo per distribuzione di oggetti, in particolare in componenti software come COM, CORBA, ecc.
  4. un metodo per rilevare cambiamenti nei dati variabili nel tempo.
 3
Author: Pool, 2017-11-02 05:58:05

Il più ovvio è che è possibile trasmettere la classe serializzata su una rete, e il destinatario può costruire un duplicato dell'instanstance originale. Allo, è possibile salvare una struttura serializzata in un file system.

Inoltre, si noti che la serializzazione è ricorsiva, quindi è possibile serializzare un intero eterogeneo struttura dati in un foop swell, se lo si desidera.

 1
Author: ddyer, 2010-02-09 21:48:16

Uso oggetti serializzati per standardizzare gli argomenti che passo a funzioni o costruttori di classi. Passare un bean serializzato è molto più pulito di una lunga lista di argomenti. Il risultato è un codice più facile da leggere ed eseguire il debug.

 1
Author: Ron Norman, 2014-11-22 15:39:16

Gli oggetti serializzati mantengono lo stato nello spazio, possono essere trasferiti sulla rete, sul file system, ecc... e il tempo, possono sopravvivere alla JVM che li ha creati.

A volte questo è utile.

 0
Author: David Soroko, 2010-02-09 21:51:41

Per il semplice scopo di apprendimento (nota, ho detto apprendimento, non ho detto meglio, o anche bene, ma solo per il gusto di capire le cose), potresti salvare i tuoi dati in un file di testo sul computer, quindi avere un programma che legge quelle informazioni, e in base al file, potresti avere il tuo programma rispondere in modo diverso. Se tu fossi più avanzato, non dovrebbe necessariamente essere un file txt, ma qualcos'altro.

Serializzazione d'altra parte, mette le cose direttamente nel computer lingua. È come dire a un computer spagnolo qualcosa in spagnolo, piuttosto che dirgli qualcosa in francese, costringendolo a imparare il francese, quindi salvare le cose nel suo spagnolo nativo traducendo tutto. Non è la risposta più tecnologica, sto solo cercando di creare un esempio comprensibile in un formato di linguaggio comune.

La serializzazione è anche più veloce, perché in Java gli oggetti vengono gestiti nell'heap e richiedono molto più tempo rispetto a se fossero rappresentati come primitive sul stack. Velocità, velocità, velocità. E meno elaborazione dei file dal punto di vista del programmatore.

 0
Author: JCoder, 2015-03-26 21:31:18