Che cos'è la serializzazione?
Nella programmazione informatica, la serializzazione è il processo di acquisizione di una struttura di dati archiviata nella memoria locale e di trasformazione 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ò anche essere utilizzata per salvare lo stato di un oggetto in modo che possa essere ricaricato successivamente dallo stesso programma. Un uso più complesso di questa funzione è invocare una chiamata di procedura remota (RPC) , eseguendo efficacemente una procedura su un altro computer attraverso una rete. Questo meccanismo consente anche la distribuzione di oggetti dati su un grande sistema di 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 è serializzato, tutti i campi dell'oggetto sono appiattiti. Questo processo è anche noto come deflazione o marshalling. I dati vengono trasformati in una riga unidimensionale di byte che possono essere scritti 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 capire che solo i dati che conteneva l'oggetto sono sottoposti a marshalling; 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 originariamente serializzata.
La serializzazione della struttura dei dati può essere utilizzata per vari 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 causerà 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, i campi dichiarati come privati saranno esposti Durante la trasmissione del flusso, questi dati possono essere acquisiti e decodificati, presentando una falla nella sicurezza. La maggior parte delle lingue consente l'esternalizzazione dei formati di serializzazione dei dati, quindi è possibile contribuire a mitigare questo rischio.
Un altro fattore da tenere a mente è che la serializzazione, in generale, funzionerà solo con oggetti 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 memorizzato provocherà un'eccezione e i dati diventeranno irrecuperabili fino a quando un'istanza dell'oggetto originale non modificato tenta di ripristinarlo.