Сериализация


В вычислительной технике сериализация (орфография США) или сериализация (орфография Великобритании) — это процесс перевода структуры данных или состояния объекта в формат, который может быть сохранен (например, в файле или буфере данных памяти ) или передан (например, через компьютерную сеть ) и реконструировать позже (возможно, в другой компьютерной среде). [1] Когда результирующая последовательность битов перечитывается в соответствии с форматом сериализации, ее можно использовать для создания семантически идентичного клона исходного объекта. Для многих сложных объектов, таких как те, которые широко используют ссылки, этот процесс не является прямым. Сериализация объектно-ориентированных объектов не включает какие-либо связанные с ними методы, с которыми они были ранее связаны.

Этот процесс сериализации объекта также называется маршаллингом объекта в некоторых ситуациях. [2] [3] [4] Противоположной операцией, извлекающей структуру данных из последовательности байтов, является десериализация (также называемая десериализацией или десортировкой ).

Чтобы некоторые из этих функций были полезными, необходимо поддерживать независимость архитектуры. Например, для максимального использования распределения компьютер, работающий на другой аппаратной архитектуре, должен иметь возможность надежно реконструировать сериализованный поток данных независимо от порядка следования байтов . Это означает, что более простая и быстрая процедура прямого копирования структуры памяти структуры данных не может надежно работать для всех архитектур. Сериализация структуры данных в независимом от архитектуры формате означает предотвращение проблем с порядком байтов , расположением памяти или просто разными способами представления структур данных в разных языках программирования .

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

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

Поскольку и сериализация, и десериализация могут управляться из общего кода (например, функция Serialize в Microsoft Foundation Classes ), общий код может выполнять и то и другое одновременно и, таким образом, 1) обнаруживать различия между объектами, сериализованных и их предыдущих копий, и 2) обеспечить ввод для следующего такого обнаружения. На самом деле нет необходимости создавать предыдущую копию, потому что различия могут быть обнаружены на лету, метод, называемый дифференциальным выполнением. Это полезно при программировании пользовательских интерфейсов, содержимое которых изменяется во времени — графические объекты можно создавать, удалять, изменять или заставлять обрабатывать входные события без необходимости написания отдельного кода для выполнения этих действий.