2010-01-31 13 views
27

Ho visto il termine "serializzato" dappertutto, ma mai spiegato. Per favore, spiega cosa significa.Che cos'è un oggetto "serializzato" nella programmazione?

+1

Se qualcuno potrebbe dare un esempio dettagliato, sarebbe bello. Quando guardo questo argomento, sono anche confuso. Gli esempi si estendono fino 'pickle.dump (oggetto, file) e' 'pickle.load (file)' (usando Python, per esempio), che è del tutto inutile onestamente nell'aiutare uno per capire. –

risposta

37

La serializzazione di solito si riferisce al processo di conversione di un tipo di dati astratto in un flusso di byte (talvolta serializzate in testo, XML o CSV o altri formati. L'importante è che si tratti di un formato semplice che può essere letto/scritto senza comprendere gli oggetti astratti che i dati rappresentano). Quando si salvano dati su un file o si trasmettono su una rete, non si può semplicemente archiviare un oggetto MyClass, è possibile memorizzare solo byte. Quindi è necessario prendere tutti i dati necessari per ricostruire il proprio oggetto e trasformarlo in una sequenza di byte che possono essere scritti sul dispositivo di destinazione, e in un secondo momento rileggere e deserializzare, ricostruendo il proprio oggetto.

+3

un tipo di dati astratto? più come un cemento .... –

+11

Gli oggetti di classe sono tipi di dati astratti. Astratto come in "non un tipo di dati primitivo, ma qualcosa che rappresenta un concetto astratto". Una classe 'Car' è un tipo di dati astratto. Rappresenta qualcosa di astratto nel programma. Non ci sono auto in esso. Solo dati che forniscono l'astrazione di uno. E quell'astrazione deve essere demolita per serializzarla. Non è possibile memorizzare un'automobile in un file, ma è possibile memorizzare i dati necessari per ricostruire l'istanza della classe 'Car'. – jalf

+6

No, non lo sono. Non sto parlando di una classe astratta, che sono d'accordo è qualcosa di completamente diverso. Un tipo di dati astratto è praticamente un termine più generale per una classe (eccetto che copre in modo piacevole gli equivalenti nei linguaggi senza classi). Una classe è un'astrazione ed è un tipo di dati. Definirlo un tipo di dati astratto non è un'idea che mi è venuta in mente. :) – jalf

10

La serializzazione è il processo di prendere un'istanza di oggetto e convertirla in un formato in cui può essere trasportata attraverso una rete o mantenuta nella memoria (come un file o un database). Il formato serializzato contiene le informazioni sullo stato dell'oggetto.

La deserializzazione è il processo di utilizzo dello stato serializzato per ricostruire l'oggetto dallo stato serializzato allo stato originale.

5

vera spiegazione semplice, la serializzazione è l'atto di prendere qualcosa che è in memoria come un'istanza di una classe (oggetto) e trasformarsi in una struttura adatta per il trasporto o l'archiviazione.

Un esempio comune è la serializzazione XML per l'utilizzo nei servizi Web - Ho un'istanza di una classe sul server e devo inviarlo via Web, prima la serializzo in xml che significa creare una versione xml di quei dati nella classe, una volta in xml posso usare un trasporto come HTTP per inviarlo facilmente.

Esistono diverse forme di serializzazione come XML o JSON.

4

Ci sono (almeno) due significati completamente diversi rispetto alla serializzazione. Uno sta trasformando una struttura dati in memoria in un flusso di bit, quindi può essere scritta su disco e ricostituita in seguito, o trasmessa su una connessione di rete e utilizzata su un'altra macchina, ecc.

L'altro significato si riferisce a seriale vs Esecuzione parallela - cioè assicurando che solo un thread di esecuzione faccia qualcosa alla volta. Ad esempio, se hai intenzione di leggere, modificare e scrivere una variabile, devi assicurarti che un thread completi una sequenza di lettura, modifica, scrittura prima che un'altra possa avviarla.

+0

Sono contento qualcuno ha detto l'altro significato di 'serializzazione' - mi ricordo di essere confuso la prima volta che mi sono imbattuto nel "sputare un oggetto in un file", cioè da quando avevo usato per significare "sezioni critiche" per lungo tempo prima che . –

+0

Credo che si intende sequenziale piuttosto che serializzato ... –

+0

No - "a puntate" può anche essere usato per significare "serializzare * l'accesso ai dati o * codice". "Marshalling" è il termine che ho usato per ottenere i dati di un oggetto a/da un file (o un altro corso d'acqua) prima che il termine "serializzazione" è venuto da utilizzare per che, nel contesto di Java/.NET (almeno per me). –

2

Cosa hanno detto. La parola "seriale" si riferisce al fatto che i byte di dati devono essere messi in un ordine standardizzato per essere scritti su un dispositivo di archiviazione seriale, come un flusso di output di file o un bus seriale. In pratica, i byte grezzi raramente sono sufficienti. Ad esempio, un indirizzo di memoria dal programma che serializza la struttura dati potrebbe non essere valido nel programma che ricostruisce l'oggetto dai dati memorizzati. Quindi è richiesto un protocollo. Ci sono stati molti, molti standard e implementazioni nel corso degli anni. Ricordo uno dalla metà degli anni '80 chiamato XDR, ma non era il primo.

0
  • si dispone di dati in un certo formato (ad esempio elenco, carta, oggetti, etc.)
  • si deve trasportare che i dati (ad esempio tramite una chiamata API o funzione)
  • il mezzo di trasporto solo supporta determinati tipi di dati (ad es. JSON, XML, ecc.)
  • Serializzazione: i dati esistenti vengono convertiti in un tipo di dati supportato in modo che possa essere trasportato.

La chiave è che è necessario trasportare i dati e il mezzo con cui si trasporta consente solo determinati formati. Il tuo attuale formato di dati non è permesso, quindi devi "serializzarlo". Quindi, come ha risposto Mitch:

La serializzazione è il processo di prendere un'istanza di oggetto e convertirla in un formato in cui può essere trasportata.

Problemi correlati