Сериализация: различия между версиями
[непроверенная версия] | [отпатрулированная версия] |
Метка: ручная отмена |
исправление |
||
Строка 1: | Строка 1: | ||
'''Сериализация''' (в программировании) — процесс перевода какой-либо [[Список структур данных|структуры данных]] в последовательность [[ |
'''Сериализация''' (в программировании) — процесс перевода какой-либо [[Список структур данных|структуры данных]] в последовательность [[Байт|байтов]]. Обратной к операции сериализации является операция ''десериализации'' (структуризации) — восстановление начального состояния структуры данных из битовой последовательности. |
||
Сериализация используется для передачи [[объект (программирование)|объектов]] по сети и для сохранения их в [[файл]]ы. Например, нужно создать распределённое [[Прикладное программное обеспечение|приложение]], разные части которого должны обмениваться данными со сложной структурой. В таком случае для типов данных, которые предполагается передавать, пишется код, который осуществляет сериализацию и десериализацию. Объект заполняется нужными [[Данные|данными]], затем вызывается код сериализации, в результате получается, например, [[XML]]-документ. Результат сериализации передаётся принимающей стороне по, скажем, [[Электронная почта|электронной почте]] или [[HTTP]]. Приложение-получатель создаёт объект того же типа и вызывает код десериализации, в результате получая объект с теми же данными, что были в объекте приложения-отправителя. По такой схеме работает, например, сериализация объектов через [[SOAP]] в [[Microsoft .NET]]. |
Сериализация используется для передачи [[объект (программирование)|объектов]] по сети и для сохранения их в [[файл]]ы. Например, нужно создать распределённое [[Прикладное программное обеспечение|приложение]], разные части которого должны обмениваться данными со сложной структурой. В таком случае для типов данных, которые предполагается передавать, пишется код, который осуществляет сериализацию и десериализацию. Объект заполняется нужными [[Данные|данными]], затем вызывается код сериализации, в результате получается, например, [[XML]]-документ. Результат сериализации передаётся принимающей стороне по, скажем, [[Электронная почта|электронной почте]] или [[HTTP]]. Приложение-получатель создаёт объект того же типа и вызывает код десериализации, в результате получая объект с теми же данными, что были в объекте приложения-отправителя. По такой схеме работает, например, сериализация объектов через [[SOAP]] в [[Microsoft .NET]]. |
Версия от 13:08, 11 января 2021
Сериализация (в программировании) — процесс перевода какой-либо структуры данных в последовательность байтов. Обратной к операции сериализации является операция десериализации (структуризации) — восстановление начального состояния структуры данных из битовой последовательности.
Сериализация используется для передачи объектов по сети и для сохранения их в файлы. Например, нужно создать распределённое приложение, разные части которого должны обмениваться данными со сложной структурой. В таком случае для типов данных, которые предполагается передавать, пишется код, который осуществляет сериализацию и десериализацию. Объект заполняется нужными данными, затем вызывается код сериализации, в результате получается, например, XML-документ. Результат сериализации передаётся принимающей стороне по, скажем, электронной почте или HTTP. Приложение-получатель создаёт объект того же типа и вызывает код десериализации, в результате получая объект с теми же данными, что были в объекте приложения-отправителя. По такой схеме работает, например, сериализация объектов через SOAP в Microsoft .NET.
Применение
Любой из схем сериализации присуще то, что кодирование данных последовательно по определению, и извлечение любой части сериализованной структуры данных требует, чтобы весь объект был считан от начала до конца и воссоздан. Во многих приложениях такая линейность полезна, потому что позволяет использовать простые интерфейсы ввода-вывода общего назначения для сохранения и передачи состояния объекта. В приложениях, где важна высокая производительность, может иметь смысл использовать более сложную, нелинейную, организацию хранения данных.
Сериализация предоставляет несколько полезных возможностей:
- метод реализации сохраняемости объектов, который более удобен, чем запись их свойств в текстовый файл на диск и повторная сборка объектов чтением файлов;
- метод осуществления удалённых вызовов процедур, как, например, в SOAP;
- метод распространения объектов, особенно в технологиях компонентно-ориентированного программирования, таких как COM и CORBA;
- метод обнаружения изменений в данных, изменяющихся со временем.
Для наиболее эффективного использования этих возможностей необходимо поддерживать независимость от архитектуры. Например, необходимо иметь возможность надёжно воссоздавать сериализованный поток данных независимо от порядка байтов, использующегося в данной архитектуре. Это значит, что наиболее простая и быстрая процедура прямого копирования участка памяти, в котором размещается структура данных, не может работать надёжно для всех архитектур. Сериализация структур данных в архитектурно-независимый формат означает, что не должно возникать проблем из-за различного порядка следования байт, механизмов распределения памяти или различий представления структур данных в языках программирования.
Недостатки
Сериализация нарушает непрозрачность абстрактного типа данных, потенциально раскрывая частные детали реализации. Тривиальные реализации, которые сериализуют все элементы данных, могут нарушать инкапсуляцию.
Чтобы озадачить конкурентов в плане создания аналогичных продуктов, разработчики патентованного программного обеспечения часто держат детали форматов сериализации своих программ в секрете. Некоторые намеренно запутывают или даже шифруют сериализованные данные. Тем не менее, совместимость требует, чтобы приложения могли понимать форматы сериализации друг друга. Поэтому архитектуры удаленного вызова методов, такие как CORBA, детально задают свои форматы сериализации.
Сериализация массива в PHP
В PHP массив сериализируется с помощью функции serialize($array), где $array — это массив, а возвращаемое значение функции — текстовая строка. После этого строку можно заново превратить в массив с помощью функции unserialize($string), где $string — сериализированный массив (строка), а возвращаемое значение функции — начальный массив.
Сериализация научных данных
Для научных наборов данных, имеющих большой объём, таких как данные, получаемые от спутников, или численные модели климата, погоды и океанов, были разработаны специальные бинарные стандарты сериализации, например HDF, netCDF и более старый GRIB.
См. также
Ссылки
В другом языковом разделе есть более полная статья Serialization (англ.). |