Che cos'è la serializzazione?


8

Ho programmato per un po 'di tempo come hobby, ma non ho iniziato a vedere questo concetto fino a poco tempo fa. Ho google "cos'è la serializzazione" numerose volte, ma in realtà non ho mai avuto alcun tipo di definizione, di solito solo esempi di come farlo. Lo vedo nei forum Ogre, nei forum Bullet e in tutti gli altri forum a cui vado, quindi penso che sia giunto il momento di capire davvero di cosa si tratta e perché usarlo.

modificare

Per chiarire, sto cercando di più sul perché usarlo, specialmente nel senso della programmazione del gioco. Ad esempio, l'API Bullet Physics parla molto della serializzazione di una mesh, quindi voglio capire perché.

Grazie :)

Risposte:


7

Dalla documentazione boost.serialization : Qui, usiamo il termine "serializzazione" per indicare la decostruzione reversibile di un insieme arbitrario di strutture di dati C ++ in una sequenza di byte. Tale sistema può essere utilizzato per ricostituire una struttura equivalente in un altro contesto di programma. A seconda del contesto, questo potrebbe utilizzare la persistenza degli oggetti dell'attrezzo, il passaggio di parametri remoti o altre funzionalità. In questo sistema utilizziamo il termine "archivio" per fare riferimento a un rendering specifico di questo flusso di byte. Potrebbe trattarsi di un file di dati binari, dati di testo, XML o altri creati dall'utente di questa libreria.

In altre parole, la serializzazione è qualsiasi processo che trasforma gli oggetti in memoria in una sorta di bytestream e la deserializzazione fa il contrario, prendendo un bystestream e trasformandolo in oggetti in memoria.

Il termine "serializzazione" non implica nulla sul formato del bytestream. Può essere un formato binario impacchettato in modo efficiente o una descrizione XML o YAML libera. Può anche essere un codice sorgente nella lingua originale stessa o in un altro linguaggio di programmazione, come JSON , che è un sottoinsieme di JavaScript. Il formato esatto del flusso serializzato dovrebbe essere scelto in base a come intendi utilizzarlo.

La serializzazione è una funzionalità integrata di molti linguaggi e ambienti, ad esempio Java e Python . In linguaggi di livello inferiore come C e C ++, è necessario utilizzare (o scrivere) librerie di serializzazione , poiché il meccanismo fornito dal linguaggio di solito non è abbastanza buono - non può seguire o serializzare puntatori e riferimenti ed è soggetto a problemi di endianness, per esempio.

Wikipedia ha un articolo decente sulla serializzazione.

La serializzazione è ampiamente utilizzata nei giochi (e in tutti i software) per molti scopi:

  • Caricamento dell'elenco di tutti gli incantesimi nel gioco dai file di risorse.
  • Salvataggio e caricamento del gioco.
  • Registrazione dello stato delle cose (ad es. Posizioni dei giocatori e inventari) in un database SQL o oggetti.
  • Richiamo di chiamate di funzioni remote su una rete o altro collegamento IPC.

6

A quanto ho capito, la serializzazione è solo il concetto di prendere un oggetto o un insieme di oggetti, trasformarli in un flusso di byte (per l'archiviazione dei dati, o la trasmissione di rete, ecc.) E successivamente ricostruire l'oggetto originale da quel bytestream (" deserializzazione ").

Bizzarro: è un po 'come un teletrasporto di Star Trek, ora ci penso.

Esistono diverse biblioteche per questo, ognuna delle quali si occupa delle piccole confusioni che tendono a mettersi in mezzo (come l'endian di bystestream e simili).


Questo ha senso, e mi piace molto l'analogia del teletrasporto, che sicuramente aiuta a comprenderlo lol. L'uso della serializzazione per il networking ha perfettamente senso per me, ma usandolo altrove, come il motore Bullet Physics e il formato .bullet, non capisco dove sia usato lì.
Aidan Knight,

Per chiarire ulteriormente la mia confusione, ho trovato questo semplice tutorial codeproject.com/KB/cpp/serialization_primer1.aspx e al passaggio 3, mostra la serializzazione dei dati in un file. Non capisco come sia diverso dal solo scrivere testo in un file usando fopen / fwrite, ecc.
Aidan Knight

La serializzazione è il processo di trasformazione di oggetti nel tuo software in testo che puoi trasmettere a fwrite (o qualunque altro lettore / scrittore orientato al bystestream di cui hai bisogno).

3

Serializzare qualcosa significa essenzialmente trasformarlo in una serie. Questo è necessario se vuoi inviare qualcosa su una rete o scriverlo su un file, perché entrambi si aspettano una serie di byte. Quindi è generalmente un termine sofisticato per i sistemi di salvataggio e caricamento. Nel caso di Bullet, sta semplicemente prendendo i dati mesh e salvandoli in una forma che Bullet può usare efficacemente. È possibile salvarlo e caricarlo in un secondo momento senza dover analizzare nuovamente le mesh.


0

Serializzare / De-serializzare è semplicemente preparare e scrivere / leggere oggetti sul / dal disco.


-3

Personalmente utilizzo la serializzazione per il networking. Al di fuori di ciò, non ne uso molto. Se vuoi sapere perché viene utilizzato in Bullet, la migliore possibilità che hai di ottenere una risposta è chiedere nei forum Bullet o leggere la documentazione.

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.