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

149

Я начинаю с объектно-ориентированного программирования (ООП) и хотел бы знать: что означает сериализация на языке ООП?

Сообщество
источник
Также взгляните на эту статью, в которой объясняется, почему не следует использовать сериализацию codeproject.com/KB/dotnet/noserialise.aspx
Нипуна,
4
Эта статья является полной BS, отсюда и ее рейтинг.
RedAces
Разве это не слишком широкие вопросы, которые обычно удаляются, потому что поиск в Google даст мгновенный ответ?
arvymetal
2
@arvymetal ты был прав. Это был первый результат, когда я гуглил :) И это было именно то, что я искал
R_G

Ответы:

143

Сериализация - это процесс превращения объекта в памяти в поток байтов, чтобы вы могли делать такие вещи, как сохранять его на диске или отправлять по сети.

Десериализация - обратный процесс: превращение потока байтов в объект в памяти.

Эндрю Барнетт
источник
46
Также глаголы Marshalи Unmarshalявляются синонимами Serializeи Deserialize.
wulfgarpro
4
Разве объект в памяти уже не представлен байтами на самом низком уровне?
Махакодер
3
Объект в памяти будет отформатирован компилятором, ОС и / или оборудованием. Измените свой компилятор, и вы измените свой формат. Сериализованный объект будет иметь формат, определенный вашим кодом, так что вы можете гарантировать формат. Это также полезно при отправке объектов по сети - принимающая машина может иметь совершенно другую архитектуру (и, следовательно, представление в памяти).
Эндрю Барнетт
1
Так это превращает это в строку?
NoName
1
Строка может быть допустимым форматом, но она не обязательно должна быть строкой. Сами строки имеют разные форматы (ASCII, UTF8, UTF16, EBCDIC ...) и на самом деле довольно хорошо демонстрируют концепцию. Строка (объект в памяти) abcбудет сериализована как 0x61 0x62 0x63(ASCII) или 0x00 0x61 0x00 0x62 0x00 0x63(UTF16) - с такими вещами, как терминаторы NUL или закодированные длины, или без них.
Эндрю Барнетт
91

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

Десериализация - полная противоположность - извлечение потока байтов из сетевого или постоянного хранилища и преобразование его обратно в объект с тем же состоянием .

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

  1. XML : преобразовать объект в XML, передать его по сети или сохранить в файле / db. Получить его и преобразовать обратно в объект с тем же состоянием. В Java мы используем библиотеку JAXB (архитектура Java для привязки XML) (из java 6 она поставляется в комплекте с JDK).
  2. JSON : То же самое можно сделать путем преобразования объекта в JSON (нотация JavaScript-объекта). Опять же, есть библиотека GSON, которую можно использовать для этого.
  3. Или мы можем использовать сериализацию, предоставляемую самим языком ООП. Например, в Java вы можете сериализовать объект, сделав его реализацию Serializable interfaceи записав его в поток объекта.
Аникет Тхакур
источник
@AniketThakur Очень хорошее объяснение, не могли бы вы также дать мне ссылку, чтобы узнать о ней JSONс нуля, поскольку я ничего об этом не знаю
Касун Сиямбалапития,
всякий раз, когда мы говорим о сериализации, почему мы всегда ссылаемся только на объект. Не можем мы использовать сериализацию на функциональном языке, где у нас нет какого-либо объекта, вместо того, чтобы использовать файлы для передачи по сети.
Пардип Шарма
1
Прежде всего, зачем нам нужно конвертировать объект в поток байтов и обратно? Почему это не скрытая операция для пользователя, который пытается это сделать?
Апарна Чаганти
1
Если мы можем использовать JSON или XML, тогда зачем нам нужно или говорить, что нужно конвертировать их в байты потока? И тогда мы сохраняем их только в JSOn или XML вместо их преобразования в байты.
Мухаммед Файзан Фарид
78

Простое объяснение через изображение:

Рекс, моя собака, сериализована!

Объяснение по аналогии:

Предположим, я разговариваю со своим приятелем по телефону и рассказываю ему о моем новом щенке.

Вот моя проблема: щенок - живое, дышащее млекопитающее. Как мне передать щенка по телефонной линии? Я не могу физически положить своего щенка в телефонную трубку.

Поэтому вместо этого мне нужно будет передать изображение щенка по телефону. Другими словами, я затем сериализую свою собаку Рекс и посылаю ему сериализованную версию Рекса по телефонной линии:

{ "name":"Rex", "age":5, "favourite_food": pedigree_choice_cuts, "favourite_game": fetch_ball, "favourite_hobby": wagging_tail }

Это идеальное представление - сериализация моей собаки.

Резюме:

Сериализация в основном означает превращение моего собачьего Рекса во что-то другое - объект JSON - который затем может быть передан по телефонной линии в виде последовательности 1 и 0. Мой приятель из Нью-Йорка может затем перевести эти 1 и 0 обратно в объект JSON, чтобы у него было идеальное представление о моей собаке Рекс.

BKSpurgeon
источник
16

Проверьте это, это даст вам хорошее объяснение:

http://en.wikipedia.org/wiki/Serialization

Я думаю, что наиболее распространенное использование термина сериализации связано с преобразованием двоичного объекта в представление XML (или другой строки), чтобы его можно было сохранить в базе данных / файле или отправить по сети при вызове веб-службы. Десериализация - это обратный процесс - преобразование XML / строки обратно в объект.

РЕДАКТИРОВАТЬ: Еще один термин, который вы можете встретить, маршалинг / демаршаллинг. Маршаллинг - это в основном та же концепция, что и сериализация, а демаршаллинг - это то же самое, что десериализация.

Энди Уайт
источник
3
Не обязательно просто XML, это может быть любое представление, даже двоичное представление
Мэтью Фарвелл
7

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

...

На этом рисунке показан общий процесс сериализации

Общий процесс сериализации

...

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

С https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/

(акцент мой)

Чамин Викрамаратна
источник
5

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

Дейв Шерохман
источник
2

сериализация - это преобразование объекта в хранимую битовую последовательность.

так что вы можете сохранить эту последовательность в файл, БД или отправить по сети.

позже вы можете десериализовать его для реального объекта и использовать его всякий раз, когда захотите.

Веб-сервисы и AJAX являются наиболее распространенным примером сериализации. Объекты сериализуются перед отправкой ответа клиенту.

Canavar
источник
1

Сериализация - это не что иное, как передача объекта, поддерживаемого Java, в поддерживаемую форму

                         (OR)

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

sriiii
источник
1

Сериализация - это процесс преобразования объекта, поддерживаемого Java, C # или любого другого (языки ООП), в переносимую форму. Таким образом, он будет транспортироваться по сети или храниться на диске. Чтобы класс был сериализуемым, он должен реализовывать сериализуемый интерфейс.

Несан Мано
источник
не только в Java или C #, в большинстве языков программирования мы используем сериализацию. Например, в Python модуль pickle используется для того же.
Пардип Шарма
0

Сериализация превращает данные в линейную «строку» байтов.

Другие говорили более или менее то же самое, но я подчеркиваю, что компьютерные модели требуют, чтобы данные помещались в одномерно адресуемую ОЗУ или постоянное хранилище.

Большинство вещей, которые являются «данными», по своей природе сериализуемы (даже если вы должны уменьшить абстрактную модель до линейной); не сериализуемы, скажем, сетевое соединение или сложная основанная на состоянии машина, такая как парсер.

переполненный
источник
0

Сериализация связана с преобразованием двоичного объекта в представление XML (или другой строки), чтобы его можно было сохранить в базе данных / файле или отправить по сети при вызове веб-службы. Десериализация - это обратный процесс - преобразование XML / строки обратно в объект.

Висванатан
источник
0

При создании экземпляра (конструирования) фактического объекта (вещи) из класса (чертежа) необходимо сохранить объект (вещь), сериализовав его (разбив его на его базовую атомную структуру), в пространство в памяти. (Вроде как Star Treks Transporter). Вы разбиваете вещь на поток информации, которую можно куда-то транспортировать и хранить. Затем, когда вы хотите восстановить объект, вы просто возвращаете атомарно сохраненный экземпляр обратно в объект. Отличается от инстанции.

Дэвид К Хилл
источник
0

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

Этот документ должен помочь вам понять сериализацию Java в деталях.

Нихил Катре
источник
-1

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

Просто относитесь к нему как к созданию куки - объект - это тесто, куки - это сериализованное тесто.

Таким образом, путем «сериализации» вы можете отправить куки своему другу.

Что-то такое :-)

Mr.ElectroNick
источник
4
... кроме того, что печенье не может быть превращено обратно в тесто (десериализовано).
Дейв Шерохман