Сериализация: различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
Altes (обсуждение | вклад) мНет описания правки |
Robiteria (обсуждение | вклад) м Роботизированная замена, унификация написания; косметические изменения |
||
Строка 10: | Строка 10: | ||
* метод обнаружения изменений в данных, изменяющихся со временем. |
* метод обнаружения изменений в данных, изменяющихся со временем. |
||
Для |
Для наиболее эффективного использования этих возможностей необходимо поддерживать независимость от архитектуры. Например, необходимо иметь возможность надёжно воссоздавать сериализованный поток данных, независимо от [[порядок байтов|порядка байтов]], использующегося в данной архитектуре. Это значит, что наиболее простая и быстрая процедура прямого копирования участка памяти, в котором размещается структура данных, не может работать надёжно для всех архитектур. Сериализация структур данных в архитектурно-независимый формат означает, что не должно возникать проблем из-за различного порядка следования байт, механизмов распределения памяти или различий представления структур данных в языках программирования. |
||
Любой из схем сериализации присуще то, что кодирование данных последовательно по определению, и извлечение любой части сериализованной структуры данных требует, чтобы весь объект был считан от начала до конца и воссоздан. Во многих приложениях такая линейность полезна, потому что позволяет использовать простые интерфейсы ввода |
Любой из схем сериализации присуще то, что кодирование данных последовательно по определению, и извлечение любой части сериализованной структуры данных требует, чтобы весь объект был считан от начала до конца и воссоздан. Во многих приложениях такая линейность полезна, потому что позволяет использовать простые интерфейсы ввода-вывода общего назначения для сохранения и передачи состояния объекта. В приложениях, где важна высокая производительность, может иметь смысл использовать более сложную, нелинейную организацию хранения данных. |
||
==Сериализация массива в PHP== |
== Сериализация массива в PHP == |
||
В PHP массив сериализируется с помощью функции serialize($array), где $array - это массив, а возвращаемое значение функции - текстовая строка. После этого строку можно заново превратить в массив с помощью функции unserialize($string), где - $string - сериализированный массив (строка), а возвращаемое значение функции - начальный массив. |
В PHP массив сериализируется с помощью функции serialize($array), где $array - это массив, а возвращаемое значение функции - текстовая строка. После этого строку можно заново превратить в массив с помощью функции unserialize($string), где - $string - сериализированный массив (строка), а возвращаемое значение функции - начальный массив. |
||
== Сериализация научных данных == |
== Сериализация научных данных == |
||
Для научных наборов данных, имеющих большой объём, таких как данные, получаемые от спутников, или численные модели климата, погоды и океанов, были разработаны специальные бинарные стандарты сериализации, например [[ |
Для научных наборов данных, имеющих большой объём, таких как данные, получаемые от спутников, или численные модели климата, погоды и океанов, были разработаны специальные бинарные стандарты сериализации, например [[Hierarchical Data Format|HDF]], [[netCDF]] и более старый [[GRIB]]. |
||
== См. также == |
== См. также == |
||
Строка 24: | Строка 24: | ||
== Ссылки == |
== Ссылки == |
||
*[http://wiki.shelek.ru/index.php/C%2B%2B_%D1%81%D0%B5%D1%80%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 Сериализация данных в C++.] |
* [http://wiki.shelek.ru/index.php/C%2B%2B_%D1%81%D0%B5%D1%80%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85 Сериализация данных в C++.] |
||
*[http://www.xakep.ru/post/51883/ Сериализация PHP-объектов глазами хакера] |
* [http://www.xakep.ru/post/51883/ Сериализация PHP-объектов глазами хакера] |
||
{{перевести|en|Serialization}} |
{{перевести|en|Serialization}} |
Версия от 19:54, 30 ноября 2013
Сериализация (в программировании) — процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации (структуризации) — восстановление начального состояния структуры данных из битовой последовательности.
Сериализация используется для передачи объектов по сети и для сохранения их в файлы. Например, нужно создать распределённое приложение, разные части которого должны обмениваться данными со сложной структурой. В таком случае для типов данных, которые предполагается передавать, пишется код, который осуществляет сериализацию и десериализацию. Объект заполняется нужными данными, затем вызывается код сериализации, в результате получается, например, XML-документ. Результат сериализации передаётся принимающей стороне, например, по электронной почте или HTTP. Приложение-получатель создаёт объект того же типа и вызывает код десериализации, в результате получая объект с теми же данными, что были в объекте приложения-отправителя. По такой схеме работает, например, сериализация объектов через SOAP в Microsoft .NET.
Применение
Сериализация предоставляет несколько полезных возможностей:
- метод реализации сохраняемости объектов, который более удобен, чем запись их свойств в текстовый файл на диск и повторная сборка объектов чтением файлов;
- метод осуществления удалённых вызовов процедур, как, например, в SOAP;
- метод распространения объектов, особенно в технологиях компонентно-ориентированного программирования, таких как COM и CORBA;
- метод обнаружения изменений в данных, изменяющихся со временем.
Для наиболее эффективного использования этих возможностей необходимо поддерживать независимость от архитектуры. Например, необходимо иметь возможность надёжно воссоздавать сериализованный поток данных, независимо от порядка байтов, использующегося в данной архитектуре. Это значит, что наиболее простая и быстрая процедура прямого копирования участка памяти, в котором размещается структура данных, не может работать надёжно для всех архитектур. Сериализация структур данных в архитектурно-независимый формат означает, что не должно возникать проблем из-за различного порядка следования байт, механизмов распределения памяти или различий представления структур данных в языках программирования.
Любой из схем сериализации присуще то, что кодирование данных последовательно по определению, и извлечение любой части сериализованной структуры данных требует, чтобы весь объект был считан от начала до конца и воссоздан. Во многих приложениях такая линейность полезна, потому что позволяет использовать простые интерфейсы ввода-вывода общего назначения для сохранения и передачи состояния объекта. В приложениях, где важна высокая производительность, может иметь смысл использовать более сложную, нелинейную организацию хранения данных.
Сериализация массива в PHP
В PHP массив сериализируется с помощью функции serialize($array), где $array - это массив, а возвращаемое значение функции - текстовая строка. После этого строку можно заново превратить в массив с помощью функции unserialize($string), где - $string - сериализированный массив (строка), а возвращаемое значение функции - начальный массив.
Сериализация научных данных
Для научных наборов данных, имеющих большой объём, таких как данные, получаемые от спутников, или численные модели климата, погоды и океанов, были разработаны специальные бинарные стандарты сериализации, например HDF, netCDF и более старый GRIB.
См. также
Ссылки
В другом языковом разделе есть более полная статья Serialization (англ.). |