Окрім того, що сказали інші відповіді:
Іноді хочеться серіалізувати речі, які не є чистими даними.
Наприклад, подумайте про ручку файлу або про підключення до сервера. Навіть незважаючи на те, що ручка або сокет файлу є int
, це число безглуздо при наступному запуску програми. Щоб правильно відтворити об’єкти, що містять ручки для таких речей, потрібно знову відкрити файли та відтворити з'єднання та вирішити, що робити, якщо це не вдасться.
Багато мов сьогодні підтримують збереження анонімних функцій у об’єктах, наприклад, onBlah()
обробник у Javascript. Це складно, оскільки такий код може містити посилання на додаткові фрагменти даних, які, у свою чергу, потребують серіалізації. (І тоді виникає проблема серіалізації коду міжплатформовим способом, що, очевидно, простіше для інтерпретованих мов.) Але все-таки, навіть якщо підтримується лише підмножина мови, вона все ще може виявитися досить корисною. Не багато механізмів серіалізації намагаються серіалізувати код, але дивіться serialize-javascript .
У випадках, коли ви хочете серіалізувати об’єкт, але він містить щось, що не підтримується вашим механізмом серіалізації, вам потрібно переписати код у такий спосіб, що працює навколо цього. Наприклад, ви можете використовувати enums замість анонімних функцій, коли існує обмежена кількість можливих функцій.
Часто ви хочете, щоб серіалізовані дані були лаконічними.
Якщо ви надсилаєте дані по мережі або навіть зберігаєте їх на диску, може бути важливим, щоб розмір був невеликим. Один з найпростіших способів досягти цього - це викидання інформації, яку можна відновити (наприклад, відкидання кешів, хеш-таблиць та альтернативних представлень одних і тих же даних).
Звичайно, програмісту потрібно вручну вибрати те, що потрібно зберегти, а що потрібно відкинути, і переконатися, що речі відбудуються під час відтворення об’єкта.
Подумайте про акт збереження гри. Об'єкти можуть містити безліч покажчиків на графічні дані, звукові дані та інші об'єкти. Але більшість цього матеріалу можна завантажити з файлів даних ігор і не потрібно зберігати у збереженому файлі. Відмова від неї може бути трудомісткою, тому дрібниці часто залишаються. Я в шістнадцять разів редагував збережені файли свого часу і виявив, що дані були явно зайвими, як-от описи текстових елементів.
Іноді простір не важливий, але читабельність - у цьому випадку ви можете використовувати формат ASCII (можливо, JSON або XML).