Как работает сериализация в Java

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

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

Как работает сериализация в Java

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

Применение[ | код]

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

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

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

Сериализация массива в PHP[ | код]

В PHP массив сериализируется с помощью функции serialize($array), где $array — это массив, а возвращаемое значение функции — текстовая строка. После этого строку можно заново превратить в массив с помощью функции unserialize($string), где $string — сериализированный массив (строка), а возвращаемое значение функции — начальный массив.

Сериализация научных данных[ | код]

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

См. также[ | код]

Ссылки[ | код]

Представьте себе, что у нас есть некоторый объект – машина. У этого объекта есть ряд параметров, например:

+ Марка

+ Максимальная скорость

+ Вес

+ Цвет

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

Что такое сериализация объектов?

Вот как может выглядеть ее структура.

Чтобы описать структуру такой таблицы, понадобилось 3 строки и 5 столбцов в базе данных.

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

Это может выглядеть вот так:

a:3:{i:0;a:4:{s:10:»Марка»;s:3:»BMW»;s:41:»Максимальная скорость»;i:215;s:6:»Вес»;i:111;s:8:»Цвет»;s:14:»красный»;}i:1;a:4:{s:10:»Марка»;s:4:»AUDI»;s:41:»Максимальная скорость»;i:125;s:6:»Вес»;i:112;s:8:»Цвет»;s:14:»зеленый»;}i:2;a:4:{s:10:»Марка»;s:33:»Еще какая-то марка»;s:41:»Максимальная скорость»;i:525;s:6:»Вес»;i:212;s:8:»Цвет»;s:10:»синий»;}}

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

Сериализация – это процесс перевода какой-либо структуры данных в последовательность битов. В  случае с сериализацией php, происходит преобразование сложной структуры хранения данных в простую текстовую строку.

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

Так зачем же нужны все эти преобразования?

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

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

Сериализация данных очень часто используется в современных скриптах и CMS системах.

Вот пример, как блог на движке WordPress хранит информацию об активированных плагинах.

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

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

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

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

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

Применение

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

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

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

Сериализация массива в PHP

В PHP массив сериализируется с помощью функции serialize($array), где $array — это массив, а возвращаемое значение функции — текстовая строка. После этого строку можно заново превратить в массив с помощью функции unserialize($string), где $string — сериализированный массив (строка), а возвращаемое значение функции — начальный массив.

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

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

См. также

Ссылки

Добавить комментарий

Закрыть меню