2010-11-26 10 views
6

I documenti iOS distinguono tra "serializzazione" e "archiviazione". Si tratta di una distinzione generale (vale a dire, vale per altre lingue) o è specifica dell'Obiettivo-C? Inoltre, qual è la differenza tra questi due?Serializzazione o archiviazione?

+0

@skaffman, io proprio non volevo questo iOS taggato in modo da poter ottenere alcune risposte da altre lingue. –

+0

GG skaffman. GG. – Mark

+1

Non è nemmeno specifico per iOS. NSKeyedArchiver è disponibile anche su Mac OS X. –

risposta

5

Questo è un caso in cui uno è l'altro (ma non tutti) del tempo.

Wikipedia ha questo da dire sulla serializzazione:

"serializzazione è il processo di conversione di una struttura di dati o un oggetto in una sequenza di bit in modo che possa essere memorizzato in un buffer di file o memoria, o trasmessa attraverso un Link connessione di rete per essere "resuscitato" più avanti nello stesso o in un altro ambiente di computer"

Così, l'archiviazione può essere solo la serializzazione, ma potrebbe anche essere la combinazione di serializzazione e compresssion, per esempio. O forse aggiunge qualche tipo di informazione di intestazione. Quindi la serializzazione è una forma di archivio, ma un archivio non è necessariamente una serializzazione.

Questo non è proprio specifico per iOS - questi termini vengono lanciati ovunque. Il loro significato specifico nel contesto di iOS potrebbe essere piuttosto specifico, però.

+0

Ottima risposta +1. In effetti, ho fatto tutto all'indietro. –

1

In generale, la serializzazione riguarda la conversione dei tipi di dati del programma in flussi di byte indipendenti dall'architettura. L'archiviazione è una serializzazione specializzata in cui è possibile memorizzare il tipo e altre informazioni basate sulla relazione che consentono di eseguire la serializzazione/unmarshall facilmente. Quindi l'archivio può essere pensato come una specializzazione e un sottoinsieme della serializzazione. Per Objective-C

serializzazione converte Objective-C tipi verso e da un flusso di byte indipendente dall'architettura. Al contrario dell'archiviazione, la serializzazione di base non registra i dati dei valori né le relazioni tra di essi; solo i valori sono registrati. È la tua responsabilità di deserializzare i dati nell'ordine corretto. Diverse classi di convenienza , tuttavia, consentono di serializzare gli elenchi di proprietà , registrando la loro struttura insieme ai relativi valori.

Con C++ dare impulso serializzazione -

http://www.boost.org/doc/libs/1_45_0/libs/serialization/doc/index.html

Qui, si usa il termine "serializzazione" a significare la decostruzione reversibili di un insieme arbitrario di C++ dati strutture ad un sequenza di byte. Un tale sistema può essere utilizzato per ricostituire una struttura equivalente in un altro contesto di programma. A seconda del nel contesto, è possibile utilizzare lo strumento per implementare la persistenza dell'oggetto, il passaggio remoto dei parametri o altre funzionalità. In questo sistema viene utilizzato il termine "archivio" per fare riferimento a uno specifico rendering di questo flusso di byte. Questo potrebbe essere un file di dati binari, dati di testo , XML o altri creati dall'utente dall'utente di questa libreria.

+0

Raffreddare +1. Questo mi aiuta a separare. Sono in attesa di altri esempi di altre lingue. –

6

In realtà stavo cercando di cercare la loro differenza dalla prospettiva IOS. L'aggiunta dei seguenti per le persone interessate:

Scopo:
archiviazione viene utilizzato per i grafici negozio di oggetti. il modello completo di dati può essere archiviato e ripristinato facilmente. Il modo in cui i file Nib funzionano può essere considerato come un esempio per l'archiviazione.

Serializzazione viene utilizzato per la memorizzazione di gerarchia arbitraria di oggetti.
I file wat plist funzionano come esempi di serializzazioni.

Differenze (estratti da guida Archives programmazione):
"L'archivio conserva l'identità di ogni oggetto nel grafico e tutte le relazioni che ha con tutti gli altri oggetti nel grafico."
Viene tracciato ogni oggetto codificato nel contesto della chiamata di rootObject. Se viene richiesto al codificatore di codificare un oggetto più di una volta, il codificatore codifica un riferimento alla prima codifica invece di codificare nuovamente l'oggetto.

"La serializzazione conserva solo i valori degli oggetti e la loro posizione nella gerarchia.I riferimenti multipli allo stesso oggetto valore potrebbero risultare in più oggetti quando deserializzati.La mutevolezza degli oggetti non viene mantenuta."

differenze di implementazione:
Qualsiasi oggetto che implementa il protocollo NSCoding può essere archiviato in cui, come solo le istanze di NSArray, NSDictionary, NSString, NSDate, NSNumber, e NSData (e alcuni dei loro sottoclassi) possono essere serializzati. Il contenuto degli oggetti array e del dizionario deve contenere anche solo oggetti di queste poche classi.

Quando utilizzare:
elenchi di proprietà (serializzazione) devono essere utilizzati per i dati che si compone principalmente di stringhe e numeri. Sono molto inefficienti se usati con grandi blocchi di dati binari.
È utile archiviare oggetti diversi dagli oggetti plist o memorizzare grandi blocchi di dati.