Ответ на этот вопрос, возможно, удивительно, никогда , или более реалистично, только когда вы вынуждены взаимодействовать с унаследованным кодом . Это рекомендация в Effective Java, 3-е издание Джошуа Блоха:
Нет никакой причины использовать сериализацию Java в любой новой системе, которую вы пишете
По словам главного архитектора Oracle Марка Рейнхольда, устранение существующего механизма сериализации Java является долгосрочной целью.
Почему Java-сериализация имеет недостатки
Java как часть языка предоставляет схему сериализации, в которую вы можете включить использование Serializable
интерфейса. Эта схема, однако, имеет несколько неразрешимых недостатков и должна рассматриваться разработчиками языка Java как неудачный эксперимент.
- Это принципиально делает вид , что можно говорить о в последовательной форме объекта. Но существует бесконечно много схем сериализации, что приводит к бесконечному количеству сериализованных форм. При наложении одной схемы без какого-либо изменения схемы приложения не могут использовать схему, наиболее подходящую для них.
- Он реализован как дополнительное средство конструирования объектов, которое обходит любые предварительные проверки, выполняемые вашими конструкторами или фабричными методами. Если не будет написан сложный, подверженный ошибкам и трудный для тестирования код дополнительной десериализации, ваш код, вероятно, имеет существенную уязвимость безопасности.
- Проверка совместимости разных версий сериализованной формы очень сложна.
- Работа с неизменяемыми объектами хлопотна.
Что делать вместо
Вместо этого используйте схему сериализации, которую вы можете явно контролировать. Например, протокол буфера, JSON, XML или ваша собственная схема.