Відповідь на це запитання, можливо, дивно, ніколи , або більш реально, лише тоді, коли вас змушують до сумісної роботи зі застарілим кодом . Це рекомендація в Ефективній Java, 3-е видання Джошуа Блоха:
Немає підстав використовувати серіалізацію Java в будь-якій новій системі, яку ви пишете
Головний архітектор Oracle Марк Райнхолд вважає , що усунення існуючого механізму серіалізації Java є довгостроковою метою.
Чому серіалізація Java недолікована
Java забезпечує частину мови схему серіалізації, до якої можна ввімкнути, використовуючи Serializable
інтерфейс. Однак ця схема має кілька недоступних недоліків, і її слід розглядати як невдалий експеримент розробниками мови Java.
- Це принципово вдає , що можна говорити про в послідовній формі об'єкта. Але існує нескінченно багато схем серіалізації, внаслідок чого утворюється нескінченно багато серіалізованих форм. Накладаючи одну схему, не змінюючи схеми, додатки не можуть використовувати найбільш відповідну для них схему.
- Він реалізований як додатковий засіб побудови об'єктів, що обходить будь-яку передумову перевірки, яку виконують ваші конструктори чи заводські методи. Якщо не написано хитрості, схильності до помилок і важко перевірити додатковий код десеріалізації, ваш код, ймовірно, має слабку слабкість безпеки.
- Тестувати сумісність різних версій серіалізованої форми дуже важко.
- Поводження з незмінними предметами є клопітким.
Що робити замість цього
Натомість використовуйте схему серіалізації, яку ви можете чітко контролювати. Наприклад, буфери протоколів, JSON, XML або ваша власна спеціальна схема.