Nella programmazione per computer, la serializzazione è il processo di prendere una struttura di dati archiviata nella memoria locale e trasformarla in un flusso di byte che può essere trasmesso su una rete o archiviato su un disco per essere riassemblato e utilizzato da un altro programma. La serializzazione può essere utilizzata anche per salvare lo stato di un oggetto in modo che possa essere ricaricato in seguito dallo stesso programma.Un uso più complesso di questa funzione è invocare una chiamata di procedura remota (RPC) , eseguendo effettivamente una procedura su un altro computer attraverso una rete.Questo meccanismo consente anche la distribuzione di oggetti dati su un grande sistema in rete.
Quasi tutti i moderni linguaggi per computer hanno il supporto nativo per la serializzazione o una libreria disponibile per aggiungere questa funzionalità.Quando un oggetto viene serializzato, tutti i campi dell’oggetto vengono appiattiti.Questo processo è noto anche come deflazione o marshalling.I dati vengono trasformati in una riga unidimensionale di byte che può essere scritta su qualsiasi flusso di output.Il tipo di flusso di output non ha importanza e potrebbe essere un file o un socket di rete.
Una volta che i dati sono stati serializzati e inviati alla posizione finale, inizia il processo di deserializzazione.Il programma che legge il flusso di byte ripristina tutte le informazioni e le inserisce in una nuova istanza dell’oggetto originale, creando un copia esatta È importante comprendere che vengono sottoposti a marshalling solo i dati che l’oggetto conteneva; l’oggetto, i suoi metodi e altri dati di implementazione non lo sono, ciò significa che il programma che deserializza i dati deve essere in grado di creare un’istanza della classe che è stata originariamente serializzata.
La serializzazione della struttura dati può essere utilizzata per una varietà di scopi. Le informazioni sugli oggetti possono essere archiviate su supporti fisici in modo che lo stato esatto di ogni oggetto possa essere ripristinato al punto in cui si trovava quando l’esecuzione del programma è stata interrotta. inviare messaggi a un altro computer che provocherà l’esecuzione di una procedura remota. La serializzazione può anche essere utilizzata per confrontare in modo efficiente i cambiamenti di stato nelle applicazioni in tempo reale.
Prima di utilizzare la serializzazione degli oggetti, è importante comprendere alcune delle limitazioni che impone.La più importante è che, attraverso il processo di conversione di un oggetto in un flusso di byte, verranno esposti i campi dichiarati come privati Durante la trasmissione del flusso, questi dati possono essere catturati e decodificati, presentando una falla di sicurezza.La maggior parte dei linguaggi consente l’esternalizzazione dei formati di serializzazione dei dati, quindi è possibile la codifica proprietaria contribuire a mitigare questo rischio.
Un altro fattore da tenere a mente è che la serializzazione, in generale, funzionerà solo con oggetti che sono esattamente uguali all’oggetto serializzato.Se vengono aggiunti nuovi campi o metodi a un oggetto , quindi la firma dell’oggetto cambierà.Ciò significa che l’oggetto archiviato genererà un’eccezione e i dati diventeranno irrecuperabili fino a quando un’istanza dell’oggetto originale non modificato non tenterà di ripristinarlo.