Що таке серіалізація?


149

Я починаю з об'єктно-орієнтованого програмування (ООП) і хотів би знати: у чому сенс серіалізації в мові OOP?


Погляньте також на цю статтю, яка пояснює, чому не використовувати серіалізацію codeproject.com/KB/dotnet/noserialise.aspx
Nipuna

4
Ця стаття є повною BS, звідси і її рейтинг.
RedAces

Хіба це не занадто широкі запитання, які зазвичай видаляються, оскільки пошук в Google дав би миттєву відповідь?
арвіметал

2
@arvymetal ви мали рацію. Це був перший результат, коли я гуглив :) І саме це я шукав
R_G

Відповіді:


143

Серіалізація - це процес перетворення об’єкта в пам'яті в потік байтів, щоб ви могли робити такі речі, як збереження його на диску або відправлення по мережі.

Десеріалізація - це зворотний процес: перетворення потоку байтів в об'єкт в пам'яті.


46
Також дієслова Marshalі Unmarshalє синонімом до Serializeі Deserialize.
wulfgarpro

4
Чи не об’єкт у пам'яті вже представлений як байти на найнижчому рівні?
mahacoder

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. Або ми можемо використовувати серіалізацію, яку надає сама мова OOP. Наприклад, в Java ви можете серіалізувати Object my, що робить його реалізацією, Serializable interfaceі записувати в Object Stream.

@AniketThakur Дуже вдале пояснення, чи можете ви також надати посилання для мене, щоб дізнатися JSONз нуля, оскільки я нічого про це не знаю
Kasun Siyambalapitiya

всякий раз, коли ми говоримо про серіалізацію, чому ми завжди посилаємося лише на Об'єкт. Не можемо використовувати серіалізацію у функціональній мові, де у нас немає об'єктів, а не ми використовуємо файли для передачі по мережі.
Пардіп Шарма

1
Перш за все, чому нам потрібно перетворити об’єкт в потік байтів і назад? Чому це не неявна операція для користувача, який намагається це зробити?
Aparna Chaganti

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 - щоб він мав ідеальне представлення моєї собаки Рекса.


16

Перевірте це, це дасть вам хороше пояснення:

http://en.wikipedia.org/wiki/Серіялізація

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

РЕДАКТУВАННЯ: Ще один термін, який ви можете зіткнутися, - це марширування / зняття з продажу. Маршаллінг - це в основному те саме поняття, що і серіалізація, а демарширування - те саме, що і десеріалізація.


3
Не обов’язково лише XML, це може бути будь-яке представлення, навіть двійкове представлення
Меттью Фарвелл

7

Серіалізація - це процес перетворення об’єкта в потік байтів для зберігання об'єкта або передачі його в пам'ять, базу даних або файл. Основна його мета - збереження стану об’єкта, щоб мати можливість його відтворити при необхідності. Зворотний процес називається десеріалізацією.

...

Ця ілюстрація показує загальний процес серіалізації

Загальний процес серіалізації

...

За допомогою серіалізації розробник може виконувати такі дії, як надсилання об’єкта у віддалений додаток за допомогою веб-сервісу, передача об'єкта з одного домену в інший, передача об'єкта через брандмауер у вигляді рядка XML або підтримка безпеки або специфіки для користувача інформація в додатках

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

(наголос мій)


5

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


2

серіалізація - це перетворення об'єкта в послідовність бітів, що зберігаються.

тож ви можете зберегти цю послідовність у файл, db або надіслати по мережі.

пізніше ви можете дезаріалізувати його до фактичного об'єкта та використовувати його знову, коли захочете.

Веб-сервіси та AJAX - найпоширеніший приклад серіалізації. Об'єкти серіалізуються перед відправленням відповіді клієнту.


1

серіалізація - це не що інше, як передача підтримуваного Java об'єкта у формат, що підтримується файлом

                         (OR)

перетворення форми, що підтримується Java, у підтримувану мережу форму. Основна сфера серіалізації - це не що інше, як передача даних з одного шару на інший ... лише серіалізовані об'єкти, які ми можемо надсилати по мережі.


1

Серіалізація - це процес перетворення об’єкта, що підтримується Java, C # або будь-якого іншого (мови OOP), в об'єкт, що переноситься. Таким чином його транспортують по мережі або зберігають на диску. Щоб клас можна було серіалізувати, він повинен реалізувати серіалізаційний інтерфейс.


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

0

Серіалізація - це перетворення даних у лінійну "рядок" байтів.

Інші сказали більш-менш те саме, але наголошую, що комп'ютерні моделі вимагають, щоб дані вміщувались в одновимірній оперативній пам’яті або постійному сховищі.

Більшість речей, які є "даними", за своєю суттю є серіалізаційними (навіть якщо потрібно звести абстрактну модель до лінійної); не серіалізаційні - це, наприклад, мережеве з'єднання або складна машина на основі штату, як аналізатор.


0

серіалізація пов'язана з перетворенням бінарного об'єкта в представлення XML (або іншого рядка), щоб він міг зберігатися в базі даних / файлах або надсилатися по мережі під час виклику веб-служби. Десеріалізація - це зворотний процес - перетворення XML / рядка назад в об'єкт.


0

При інстанціюванні (конструюванні) фактичного об'єкта (речі) з класу (креслення) виникає необхідність збереження об'єкта (речі) шляхом його серіалізації (розбиття на основну структуру атома) до простору в пам'яті. (На кшталт транспортера Star Treks). Ви розбиваєте річ у ній на потоці інформації, яку можна перенести кудись і зберігати. Тоді, коли ви хочете реконструювати річ, ви просто потягнете атомно збережений екземпляр назад в об’єкт. Відмінні від інсталяції.


0

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

Цей документ повинен допомогти вам детальніше зрозуміти серіалізацію Java.


-1

Серіалізація - це коли об'єкт (шматок пам'яті) перекладається у форму, коли стан об'єкта може бути збережений у файлі (як приклад).

Просто трактуйте це як приготування печива - предмет - це тісто, печиво - це серіалізоване тісто.

Отже, "серіалізуючи", ви можете надсилати файли cookie своєму другові.

Щось схоже :-)


4
... крім того, печиво не може бути повернене в тісто (дезаріалізоване).
Дейв Шерохман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.