Сериализация против архивирования?

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

3 ответов


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

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

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

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

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


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

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

сериализация используется для хранения произвольной иерархии объектов.
Ват plist файлы работы считается например сериализации.

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

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

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

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


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

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

с помощью сериализации c++ boost --

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

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