序列化与存档?

时间:2010-11-26 21:46:10

标签: serialization nskeyedarchiver archiving

iOS文档区分“序列化”和“归档”。这是一般性的区别(即,用其他语言保存)还是特定于Objective-C?另外,这两者有什么区别?

3 个答案:

答案 0 :(得分:6)

我实际上是想从IOS角度寻找他们的不同之处。为感兴趣的人添加以下内容:

<强>目的:
存档用于存储对象图。完整的数据模型可以轻松存档和恢复。 Nib文件的工作方式可以视为归档的示例。

序列化用于存储任意对象层次结构 可以将wat plist文件的工作视为序列化的示例。

差异(摘自档案编程指南):
“存档保留了图表中每个对象的标识以及它与图表中所有其他对象的所有关系。”
跟踪在rootObject调用的上下文中编码的每个对象。如果要求编码器多次编码对象,则编码器编码对第一编码的引用,而不是再次编码对象。

“序列化只保留对象的值及其在层次结构中的位置。对同一值对象的多次引用可能在反序列化时产生多个对象。不保持对象的可变性。”

实施差异:
任何实现NSCoding协议的对象都可以归档,只有NSArray,NSDictionary,NSString,NSDate,NSNumber和NSData(以及它们的一些子类)的实例才能被序列化。数组和字典对象的内容也必须只包含这几个类的对象。

何时使用:
属性列表(序列化)应该用于主要由字符串和数字组成的数据。当与大块二进制数据一起使用时,它们的效率非常低 存档除plist对象以外的对象或存储大块数据是值得的。

答案 1 :(得分:5)

这是一个是另一个(但不是全部)时间的情况。

维基百科有关于序列化的说法:

“序列化是将数据结构或对象转换为比特序列的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在”复活“或”复活“。另一个计算机环境“

因此,归档可能只是序列化,但它也可以是序列化和压缩的组合,例如。或者它可能会添加某种标题信息。因此序列化是一种存档形式,但存档不一定是序列化。

这并不是特定于iOS的 - 这些术语遍布各地。但是,它们在iOS环境中的具体含义可能非常具体。

答案 2 :(得分:1)

一般来说,Serialization涉及将程序数据类型转换为独立于体系结构的字节流。归档是一种专门的序列化,您可以存储基于类型和其他关系的信息,以便您轻松地反序列化/取消编组。因此档案可以被认为是序列化的专业化和子集。对于Objective-C

  

序列化转换Objective-C   来往的类型   与体系结构无关的字节流。   与归档相比,基本   序列化不记录数据   值的类型也不是   他们之间的关系;只有   价值本身被记录下来。它是   你有责任反序列化   数据按正确顺序排列。一些   然而,方便课程呢   提供序列化的能力   财产清单,记录他们的   结构及其价值观。

使用C ++ boost序列化 -

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

  

在这里,我们使用术语“序列化”   意味着可逆的解构   一组任意C ++数据   结构到一个字节序列。   这样的系统可以用来   重建一个等效的结构   在另一个程序环境中。根据   在上下文中,这可能会使用   实现对象持久性,远程   参数传递或其他设施。   在这个系统中我们使用这个术语   “存档”是指具体的   渲染这个字节流。   这可能是二进制数据文件,   文本数据,XML或其他一些创建的   由该库的用户。