2010-11-26 24 views
6

Los documentos iOS diferencian entre "serializar" y "archivar". ¿Es esta una distinción general (es decir, se mantiene en otros idiomas) o es específica de Objective-C? Además, ¿cuál es la diferencia entre estos dos?Serialización vs. Archivo?

+0

@skaffman, yo precisamente no quería este iOS etiquetado para que pudiera obtener algunas respuestas de otros idiomas. –

+0

GG skaffman. GG. – Mark

+1

Ni siquiera es específico de iOS. NSKeyedArchiver también está disponible para Mac OS X. –

Respuesta

5

Este es un caso de uno siendo el otro algunos (pero no todos) del tiempo.

Wikipedia tiene esto que decir acerca de serialización:

"La serialización es el proceso de convertir una estructura de datos o un objeto en una secuencia de bits de modo que se puede almacenar en una memoria intermedia de archivos o la memoria, o transmitida a través de una enlace de conexión de red para ser "resucitado", más adelante en el mismo o en otro entorno informático"

Así, archivar puede ser sólo serialización, pero también podría ser la combinación de serialización y compresssion, por ejemplo. O tal vez agrega algún tipo de información de encabezado. Entonces la serialización es una forma de archivo, pero un archivo no es necesariamente una serialización.

Esto no es realmente específico para iOS: estos términos se vuelcan por todas partes. Sin embargo, su significado específico en el contexto de iOS podría ser bastante específico.

+0

Gran respuesta +1. De hecho, tuve todo al revés. –

1

En general, la serialización se refiere a la conversión de los tipos de datos de su programa en flujos de bytes independientes de la arquitectura. El archivado es una serialización especializada en la que se puede almacenar el tipo y otra información basada en relaciones que le permite deserializar/deshacer fácilmente. Por lo tanto, el archivo puede considerarse una especialización y un subconjunto de la serialización. Para Objective-C

serialización convierte Objective-C tipos ay desde un flujo de bytes independiente de la arquitectura. En contraste con el archivo, la serialización básica no registra los datos tipo de los valores ni las relaciones entre ellos; solo se registran los valores de . Es su responsabilidad de deserializar los datos en el orden correcto. Sin embargo, varias clases de conveniencia , proporcionan la capacidad de serializar listas de propiedades , registrando su estructura junto con sus valores.

Con C++ impulsar la serialización -

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

Aquí, utilizamos el término "serialización" en el sentido de la deconstrucción reversible de un conjunto arbitrario de datos C++ estructuras a una secuencia de bytes. Tal sistema se puede usar para reconstituir una estructura equivalente en otro contexto de programa. Según en el contexto, esto podría utilizar implementar persistencia de objetos, paso de parámetro remoto u otra facilidad. En este sistema, utilizamos el término "archivo" para referirnos a una representación específica de esta secuencia de bytes. Esto podría ser un archivo de datos binarios, datos de texto , XML, o alguna otra creada por el usuario de esta biblioteca.

+0

Cool +1. Esto me ayuda a separarme. Estoy esperando más ejemplos de otros idiomas. –

6

En realidad, estaba tratando de buscar su diferencia desde la perspectiva de IOS. Añadiendo lo siguiente para las personas interesadas:

Propósito:
Archivado se utiliza para gráficos tienda de objetos. el modelo de datos completo se puede archivar y restaurar fácilmente. La forma en que funcionan los archivos Nib se puede considerar como un ejemplo para archivar.

La serialización se utiliza para almacenar una jerarquía de objetos arbitraria.
El trabajo de archivos wat plist se puede considerar como serializaciones de ejemplo.

Diferencias (extractos de guía Archives programación):
"El archivo conserva la identidad de cada objeto en el gráfico y todas las relaciones que tiene con todos los otros objetos en el gráfico."
Se realiza un seguimiento de todos los objetos codificados en el contexto de la invocación de rootObject. Si se le pide al codificador que codifique un objeto más de una vez, el codificador codifica una referencia a la primera codificación en lugar de codificar el objeto nuevamente.

"La serialización solo conserva los valores de los objetos y su posición en la jerarquía.Múltiples referencias al mismo objeto de valor pueden dar como resultado múltiples objetos cuando se deserializan.La mutabilidad de los objetos no se mantiene."

diferencias implementación:
Cualquier objeto que implementa el protocolo NSCoding se puede archivar donde como únicos casos de NSArray, NSDictionary, NSString, NSDate, NSNumber, y NSData (y algunos de sus subclases) se pueden serializar. Los contenidos de los objetos de matriz y diccionario también deben contener solo objetos de estas pocas clases.

Cuándo utilizar:
listas de propiedades (serialización) se debe utilizar para los datos que consta principalmente de cadenas y números. Son muy ineficientes cuando se usan con bloques grandes de datos binarios.
Es útil archivar objetos que no sean plist o almacenar grandes bloques de datos.

Cuestiones relacionadas