Сериализация: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
м робот добавил: zh:序列化
"битовая последовательноcть" вместо "последовательность байтов"
 
(не показано 45 промежуточных версий 38 участников)
Строка 1: Строка 1:
'''Сериализация''' (в программировании) способ перевода какой-либо [[Список структур данных|структуры данных]] в последовательность [[бит]]ов. Обратной операции сериализации является операция [[Десериализация|десериализации]]восстановление начального состояния структуры данных из битовой последовательности.
'''Сериализация''' (в программировании) процесс перевода [[Структура данных|структуры данных]] в битовую последовательность. Обратной к операции сериализации является операция ''десериализации'' (структуризации) создание структуры данных из битовой последовательности.


Сериализация используется для передачи [[объект]]ов. Например, нужно создать распределённое [[Прикладное программное обеспечение|приложение]], разные части которого бы обменивалось какой-либо [[Информация|информацией]]. Создаётся [[класс]], например TransferData, со всеми нужными [[Данные|данными]], заполняется нужной информацией, сериализируется в [[xml]]-документ и, например, отсылается по [[Электронная почта|электронной почте]] в другую [[Страна|страну]]. Получатель десериализирует его в своём приложении и работает как с классом этого же приложения.
Сериализация используется для передачи [[объект (программирование)|объектов]] по сети и для сохранения их в [[файл]]ы. Например, нужно создать распределённое [[Прикладное программное обеспечение|приложение]], разные части которого должны обмениваться данными со сложной структурой. В таком случае для типов данных, которые предполагается передавать, пишется код, который осуществляет сериализацию и десериализацию. Объект заполняется нужными [[Данные|данными]], затем вызывается код сериализации, в результате получается, например, [[XML]]-документ. Результат сериализации передаётся принимающей стороне по, скажем, [[Электронная почта|электронной почте]] или [[HTTP]]. Приложение-получатель создаёт объект того же типа и вызывает код десериализации, в результате получая объект с теми же данными, что были в объекте приложения-отправителя. По такой схеме работает, например, сериализация объектов через [[SOAP]] в [[Microsoft .NET]].


== Применение ==
[[Категория:Программирование]]
Любой из схем сериализации присуще то, что кодирование данных последовательно по определению, и извлечение любой части сериализованной структуры данных требует, чтобы весь объект был считан от начала до конца и воссоздан. Во многих приложениях такая линейность полезна, потому что позволяет использовать простые интерфейсы ввода-вывода общего назначения для сохранения и передачи состояния объекта. В приложениях, где важна высокая производительность, может иметь смысл использовать более сложную, нелинейную, организацию хранения данных.


Сериализация предоставляет несколько полезных возможностей:
[[als:Serialisierung]]
* метод реализации [[сохраняемость (информатика)|сохраняемости]] объектов, который более удобен, чем запись их свойств в текстовый файл на диск и повторная сборка объектов чтением файлов;
[[ca:Serialització]]
* метод осуществления [[удалённый вызов процедур|удалённых вызовов процедур]], как, например, в [[SOAP]];
[[de:Serialisierung]]
* метод распространения объектов, особенно в технологиях [[компонентно-ориентированное программирование|компонентно-ориентированного программирования]], таких как [[Component Object Model|COM]] и [[CORBA]];
[[en:Serialization]]
* метод обнаружения изменений в данных, изменяющихся со временем.
[[es:Serialización]]

[[fr:Sérialisation]]
Для наиболее эффективного использования этих возможностей необходимо поддерживать независимость от архитектуры. Например, необходимо иметь возможность надёжно воссоздавать сериализованный поток данных независимо от [[порядок байтов|порядка байтов]], использующегося в данной архитектуре. Это значит, что наиболее простая и быстрая процедура прямого копирования участка памяти, в котором размещается структура данных, не может работать надёжно для всех архитектур. Сериализация структур данных в архитектурно-независимый формат означает, что не должно возникать проблем из-за различного порядка следования байт, механизмов распределения памяти или различий представления структур данных в языках программирования.
[[gl:Serialización]]

[[it:Serializzazione]]
== Недостатки ==
[[ja:シリアライズ]]
Сериализация нарушает непрозрачность абстрактного типа данных, потенциально раскрывая частные детали реализации. Тривиальные реализации, которые сериализуют все элементы данных, могут нарушать инкапсуляцию.
[[nl:Serialisatie]]

[[pl:Serializacja]]
Чтобы озадачить конкурентов в плане создания аналогичных продуктов, разработчики патентованного программного обеспечения часто держат детали форматов сериализации своих программ в секрете. Некоторые намеренно запутывают или даже шифруют сериализованные данные. Тем не менее, совместимость требует, чтобы приложения могли понимать форматы сериализации друг друга. Поэтому архитектуры удаленного вызова методов, такие как CORBA, детально задают свои форматы сериализации.
[[pt:Serialização]]

[[sk:Marshalling]]
== Сериализация научных данных ==
[[zh:序列化]]
Для научных наборов данных, имеющих большой объём, таких как данные, получаемые от спутников, или численные модели климата, погоды и океанов, были разработаны специальные бинарные стандарты сериализации, например [[Hierarchical Data Format|HDF]], [[netCDF]] и более старый [[GRIB]].

== См. также ==
* [[Маршалинг]]
* [[JSON]]
* [[BSON]]

== Ссылки ==
* [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++.]
* [https://xakep.ru/2010/04/22/51883/ Сериализация PHP-объектов глазами хакера]
* [https://cbor.io/ RFC 8949 Concise Binary Object Representation]

{{перевести|en|Serialization}}

[[Категория:Программирование]]
[[Категория:Структуры данных]]

Текущая версия от 17:18, 11 августа 2022

Сериализация (в программировании) — процесс перевода структуры данных в битовую последовательность. Обратной к операции сериализации является операция десериализации (структуризации) — создание структуры данных из битовой последовательности.

Сериализация используется для передачи объектов по сети и для сохранения их в файлы. Например, нужно создать распределённое приложение, разные части которого должны обмениваться данными со сложной структурой. В таком случае для типов данных, которые предполагается передавать, пишется код, который осуществляет сериализацию и десериализацию. Объект заполняется нужными данными, затем вызывается код сериализации, в результате получается, например, XML-документ. Результат сериализации передаётся принимающей стороне по, скажем, электронной почте или HTTP. Приложение-получатель создаёт объект того же типа и вызывает код десериализации, в результате получая объект с теми же данными, что были в объекте приложения-отправителя. По такой схеме работает, например, сериализация объектов через SOAP в Microsoft .NET.

Применение

[править | править код]

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

Сериализация предоставляет несколько полезных возможностей:

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

Недостатки

[править | править код]

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

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

Сериализация научных данных

[править | править код]

Для научных наборов данных, имеющих большой объём, таких как данные, получаемые от спутников, или численные модели климата, погоды и океанов, были разработаны специальные бинарные стандарты сериализации, например HDF, netCDF и более старый GRIB.