Che cos'è la serializzazione?


149

Sto iniziando con la programmazione orientata agli oggetti (OOP) e vorrei sapere: qual è il significato della serializzazione nel linguaggio OOP?



4
Quell'articolo è completo BS, da cui la sua valutazione.
RedAces

Non è il tipo di domande troppo ampie che vengono solitamente rimosse, perché una ricerca su Google darebbe una risposta immediata?
arvymetal

2
@arvymetal avevi ragione. Questo è stato il primo risultato quando ho cercato su
Google

Risposte:


143

La serializzazione è il processo di trasformazione di un oggetto in memoria in un flusso di byte in modo da poter eseguire operazioni come archiviarlo su disco o inviarlo in rete.

La deserializzazione è il processo inverso: trasformare un flusso di byte in un oggetto in memoria.


46
Inoltre, i verbi Marshale Unmarshalsono sinonimi di Serializee Deserialize.
wulfgarpro,

4
Un oggetto in memoria non è già rappresentato come byte al livello più basso?
mahacoder,

3
Un oggetto in memoria verrà formattato dal compilatore, dal sistema operativo e / o dall'hardware. Cambia il tuo compilatore e cambi il tuo formato. Un oggetto serializzato avrà un formato definito dal tuo codice, quindi puoi garantirlo. Ciò è utile anche quando si inviano oggetti attraverso una rete: la macchina ricevente potrebbe avere un'architettura completamente diversa (e quindi una rappresentazione in memoria).
Andrew Barnett,

1
Quindi lo trasforma in una stringa?
NoName

1
Una stringa può essere un formato valido, ma non deve essere una stringa. Le stringhe stesse hanno formati diversi (ASCII, UTF8, UTF16, EBCDIC ...) e dimostrano effettivamente il concetto abbastanza bene. La stringa (un oggetto in memoria) abcverrebbe serializzata come 0x61 0x62 0x63(ASCII) o 0x00 0x61 0x00 0x62 0x00 0x63(UTF16) - con o senza elementi come terminatori NUL o lunghezze codificate.
Andrew Barnett,

91

In parole semplici, la serializzazione è un processo di conversione di un oggetto in un flusso di byte in modo che possa essere trasferito su una rete o archiviato in un archivio permanente.

La deserializzazione è esattamente l'opposto: recupera un flusso di byte dalla memoria di rete o di persistenza e riconvertitelo nell'oggetto con lo stesso stato .

La cosa da capire è come questi flussi di byte vengono interpretati o manipolati in modo da ottenere esattamente lo stesso Oggetto / stesso stato. Ci sono vari modi per ottenerlo. Alcuni di loro sono -

  1. XML : converti l'oggetto in XML, trasferiscilo su una rete o memorizzalo in un file / db. Recuperalo e convertilo nuovamente nell'oggetto con lo stesso stato. In Java utilizziamo la libreria JAXB (Java architecture for XML binding) (da java 6 viene fornito in bundle con JDK).
  2. JSON : lo stesso può essere fatto convertendo l'oggetto in JSON (notazione oggetto JavaScript). Ancora una volta c'è la libreria GSON che può essere utilizzata per questo.
  3. Oppure possiamo usare la serializzazione fornita dal linguaggio OOP stesso. Ad esempio, in Java è possibile serializzare un oggetto facendolo implementare Serializable interfacee scrivere su Object Stream.

@AniketThakur Un'ottima spiegazione, puoi anche fornirmi un link per imparare JSONda zero, dato che non ne so nulla
Kasun Siyambalapitiya

ogni volta che parliamo di serializzazione, perché ci riferiamo sempre solo all'oggetto. Non possiamo usare la serializzazione nel linguaggio funzionale in cui non abbiamo alcun oggetto piuttosto che utilizzare i file per il trasferimento in rete.
Pardeep Sharma,

1
Prima di tutto, perché dobbiamo convertire un oggetto in un flusso di byte e viceversa? Perché non è un'operazione implicita per un utente che sta cercando di farlo?
Aparna Chaganti,

1
Se possiamo usare JSON o XML, allora perché abbiamo bisogno o dicendo che li convertiamo in byte di stream? E poi li memorizziamo solo in JSOn o XML invece di convertirli in byte.
Muhammad Faizan è stato pagato il

78

Spiegazione semplice tramite immagine:

Rex, il mio cane, è serializzato!

Spiegazione per analogia:

Supponiamo che stia parlando con il mio amico al telefono e gli sto parlando del mio nuovo cucciolo.

Ecco il mio problema: il cucciolo è un mammifero vivente e che respira. Come intendo trasmettere un cucciolo sulla linea telefonica? Non riesco fisicamente a mettere il mio cucciolo nel mio ricevitore del telefono.

Quindi, invece, dovrò comunicare al telefono una rappresentazione del cucciolo. In altre parole, quindi serializzo il mio cane Rex e gli invio la versione serializzata di Rex tramite la linea telefonica:

{ "name":"Rex", "age":5, "favourite_food": pedigree_choice_cuts, "favourite_game": fetch_ball, "favourite_hobby": wagging_tail }

È una rappresentazione perfetta - una serializzazione del mio cane.

Sommario:

La serializzazione in pratica significa trasformare il mio cane Rex in qualcos'altro - un oggetto JSON - che può quindi essere trasportato sulla linea telefonica come una serie di 1 e 0. Il mio amico a New York può quindi tradurre quegli 1 e 0 in un oggetto JSON - in modo che abbia una rappresentazione perfetta del mio cane Rex.


16

Dai un'occhiata, questo ti darà una buona spiegazione:

http://en.wikipedia.org/wiki/Serialization

Penso che l'uso più comune del termine serializzazione abbia a che fare con la conversione di un oggetto binario in una rappresentazione XML (o altra stringa) in modo che possa essere archiviato in un database / file o inviato attraverso una rete in una chiamata del servizio web. La deserializzazione è il processo inverso: riconvertire un XML / stringa in un oggetto.

EDIT: Un altro termine che potresti incontrare è marshalling / unmarshalling. Il marshalling è fondamentalmente lo stesso concetto della serializzazione e il non marshalling è lo stesso della deserializzazione.


3
Non necessariamente solo XML, può essere qualsiasi rappresentazione, anche una rappresentazione binaria
Matthew Farwell,

7

La serializzazione è il processo di conversione di un oggetto in un flusso di byte per archiviare l'oggetto o trasmetterlo alla memoria, a un database o a un file. Il suo scopo principale è quello di salvare lo stato di un oggetto per poterlo ricreare quando necessario. Il processo inverso si chiama deserializzazione.

...

Questa illustrazione mostra l'intero processo di serializzazione

Processo generale di serializzazione

...

Tramite la serializzazione, uno sviluppatore può eseguire azioni come l'invio dell'oggetto a un'applicazione remota tramite un servizio Web, il passaggio di un oggetto da un dominio a un altro, il passaggio di un oggetto attraverso un firewall come stringa XML o il mantenimento della sicurezza o specifici dell'utente informazioni tra le applicazioni

Da https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/

(enfatizzare il mio)


5

La serializzazione è il processo di conversione di dati non ordinati (come un oggetto) in una serie di token che possono essere utilizzati in seguito per ricostruire i dati originali. Il modulo serializzato è spesso una stringa di testo, ma non deve esserlo.


2

la serializzazione sta convertendo un oggetto in una sequenza di bit memorizzabile.

così puoi salvare questa sequenza in un file, db o inviare in rete.

in seguito è possibile deserializzarlo sull'oggetto reale e riutilizzarlo ogni volta che lo si desidera.

Web Services e AJAX sono l'esempio più comune di serializzazione. Gli oggetti serializzati prima di inviare la risposta al client.


1

la serializzazione non è altro che il trasferimento dell'oggetto supportato da java in un modulo supportato da file

                         (OR)

convertire il modulo supportato da java in un modulo supportato dalla rete ... lo scopo principale della serializzazione non è altro che trasferire i dati da un livello a un altro livello ... solo oggetti serializzati che possiamo inviare sulla rete ..


1

La serializzazione è il processo di conversione di un oggetto supportato da Java, C # o qualsiasi altro (linguaggio OOP) in una forma trasportabile. In questo modo può essere trasportato sulla rete o archiviato su un disco. Perché una classe sia serializzabile, deve implementare un'interfaccia serializzabile.


non solo limitato a Java o C #, nella maggior parte del linguaggio di programmazione utilizziamo la serializzazione. Ad esempio nel modulo pickle python viene utilizzato per lo stesso.
Pardeep Sharma,

0

La serializzazione sta trasformando i dati in una "stringa" lineare di byte.

Altri hanno detto più o meno la stessa cosa, ma sottolineo che i modelli di computer richiedono che i dati si adattino alla RAM o all'archiviazione persistente indirizzata in modo unidimensionale.

La maggior parte delle cose che sono "dati" sono intrinsecamente serializzabili (anche se è necessario ridurre il modello astratto a uno lineare); non serializzabili sono dire una connessione di rete o una complicata macchina basata sullo stato come un parser.


0

la serializzazione ha a che fare con la conversione di un oggetto binario in una rappresentazione XML (o altra stringa) in modo che possa essere archiviato in un database / file o inviato attraverso una rete in una chiamata di servizio web. La deserializzazione è il processo inverso: riconvertire un XML / stringa in un oggetto.


0

Quando si crea un'istanza (costruzione) dell'oggetto reale (l'oggetto) da una classe (progetto) è necessario salvare l'oggetto (oggetto) serializzandolo (suddividendolo nella sua struttura atomica di base) in uno spazio in memoria. (Un po 'come Star Treks Transporter). Si suddivide la cosa in un flusso di informazioni che possono essere trasportate da qualche parte e archiviate. Quindi, quando si desidera ricostruire la cosa, è sufficiente riportare l'istanza memorizzata atomicamente nell'oggetto. Diverso dall'installazione.


0

La serializzazione è il processo di conversione di un oggetto in un flusso di dati binario in modo che possa essere archiviato in un file o inviato attraverso una rete dove può essere riportato nuovamente allo stesso oggetto.

Questo documento dovrebbe aiutarti a comprendere in dettaglio la serializzazione Java.


-1

La serializzazione è quando l'oggetto (un pezzo di memoria) tradotto in una forma in cui lo stato dell'oggetto può essere salvato nel file (come esempio).

Basta trattarlo come fare i biscotti - l'oggetto è un impasto, il biscotto - è un impasto serializzato.

Quindi, "serializzando" puoi inviare cookie al tuo amico.

Qualcosa del genere :-)


4
... tranne che i biscotti non possono essere convertiti in pasta (deserializzata).
Dave Sherohman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.