Сериализация против архивации? - PullRequest
6 голосов
/ 27 ноября 2010

В документации для iOS проводится различие между «сериализацией» и «архивированием». Является ли это общим отличием (т. Е. Имеет место в других языках) или оно специфично для Objective-C? Кроме того, в чем разница между этими двумя?

Ответы [ 3 ]

6 голосов
/ 07 июня 2011

Я на самом деле пытался найти их разницу с точки зрения IOS. Добавим следующее для интересующихся:

Назначение:
Архивация используется для хранения графов объектов. Полная модель данных может быть легко заархивирована и восстановлена. Принцип работы Nib-файлов можно рассматривать как пример для архивирования.

Сериализация используется для хранения произвольной иерархии объектов.
Работа с файлами wat plist может рассматриваться как пример сериализации.

Различия (выдержки из руководства по программированию Архива):
«Архив сохраняет идентичность каждого объекта в графе и все отношения, которые он имеет со всеми другими объектами в графе».
Каждый объект, закодированный в контексте вызова rootObject, отслеживается. Если кодера просят кодировать объект более одного раза, кодер кодирует ссылку на первое кодирование вместо того, чтобы снова кодировать объект.

"Сериализация только сохраняет значения объектов и их положение в иерархии. Многократные ссылки на один и тот же объект значения могут привести к множеству объектов при десериализации. Изменчивость объектов не поддерживается."

Различия в реализации:
Любой объект, который реализует протокол NSCoding, может быть заархивирован, где могут быть сериализованы только экземпляры NSArray, NSDictionary, NSString, NSDate, NSNumber и NSData (и некоторые из их подклассов). Содержимое объектов массива и словаря также должно содержать только объекты этих нескольких классов.

Когда использовать:
списки свойств (сериализация) должны использоваться для данных, которые состоят в основном из строк и чисел. Они очень неэффективны при использовании с большими блоками двоичных данных.
Стоит архивировать объекты, отличные от plist, или хранить большие блоки данных.

5 голосов
/ 27 ноября 2010

Это случай, когда один является другим (но не всем) того времени.

Википедия может сказать о сериализации:

"Сериализация - это процесс преобразованияструктура данных или объект в виде последовательности битов, так что они могут быть сохранены в буфере файла или памяти или переданы по каналу сетевого подключения для последующего «воскрешения» в той же или другой компьютерной среде »

архивирование может быть только сериализацией, но также может быть, например, комбинацией сериализации и сжатия.Или, возможно, он добавляет какую-то информацию заголовка.Так что сериализация - это форма архива, но архив не обязательно является сериализацией.

Это не совсем специфично для iOS - эти термины разбросаны повсюду.Однако их конкретное значение в контексте iOS может быть довольно конкретным.

1 голос
/ 27 ноября 2010

Вообще говоря, сериализация связана с преобразованием типов данных вашей программы в независимые от архитектуры потоки байтов.Архивирование - это специализированная сериализация, в которой вы можете хранить тип и другую информацию, основанную на отношениях, что позволяет легко десериализовать / разобрать.Таким образом, архивирование можно рассматривать как специализацию и подмножество сериализации.Для Objective C

Сериализация преобразует типы Objective C в и из архитектурно-независимого потока байтов.В отличие от архивирования, базовая сериализация не записывает тип данных значений или отношения между ними;записываются только сами значения.Вы несете ответственность за десериализацию данных в правильном порядке.Однако некоторые удобные классы предоставляют возможность сериализации списков свойств, записывая их структуру вместе со своими значениями.

С расширенной сериализацией C ++ -

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

Здесь мы используем термин «сериализация» для обозначения обратимой деконструкции произвольного набора структур данных C ++ в последовательность байтов.Такая система может использоваться для восстановления эквивалентной структуры в другом программном контексте.В зависимости от контекста, это может быть связано с сохранением объекта, удаленной передачей параметров или другим средством.В этой системе мы используем термин «архив» для обозначения конкретного рендеринга этого потока байтов.Это может быть файл двоичных данных, текстовых данных, XML или другой файл, созданный пользователем этой библиотеки.

...