Как сериализовать несериализуемое в Java?

Как я могу сериализовать объект, который не реализует Serializable? Я не могу отметить его Serializable, потому что class принадлежит сторонней библиотеке.

Вы не можете сериализовать class, который не реализует Serializable , но вы можете обернуть его в class, который это делает. Для этого вы должны реализовать readObject и writeObject в своем classе- writeObject чтобы вы могли сериализовать свои объекты по-своему.

  • Во-первых, сделайте свой несериализуемый полевой transient .
  • В writeObject сначала вызовите defaultWriteObject в streamе для хранения всех непереходных полей, а затем вызовите другие методы для сериализации отдельных свойств вашего объекта, не подлежащего сериализации.
  • В readObject сначала вызовите defaultReadObject в streamе для чтения всех непереходных полей, затем вызовите другие методы (соответствующие тем, которые вы добавили в writeObject ), чтобы десериализовать ваш объект, не подлежащий сериализации.

Я надеюсь в этом есть смысл. 🙂

Оберните несериализуемый class в собственный class, который реализует Serializable . В методе writeObject вашего classа сделайте все необходимое для сериализации достаточной информации о несериализуемом объекте, чтобы метод readObject вашего classа readObject его восстановить.

В качестве альтернативы обратитесь к разработчику classа, не связанного с сериализацией, и попросите его исправить его. 🙂

Если ваш class уже реализует интерфейс Serializable (требуется для сериализации), все, что вам нужно сделать, это объявить поле, которое вы не хотите сериализовать с переходным процессом:

  public transient String description; 

Вы можете использовать Kryo. Он работает с несериализованными classами, но classы необходимо зарегистрировать заранее.

Если class не является окончательным, вы можете создать свой собственный class, который расширяет его и реализует Serializable. Однако есть много других способов сериализации, помимо встроенного механизма Java.

  • Поле Gson Serialize, если оно не пустое или не пустое
  • Зачем генерировать длинный serialVersionUID вместо простого 1L?
  • Как писать и читать java-сериализованные объекты в файл
  • jQuery для сериализации только элементов в div
  • Можно ли сериализовать и десериализовать class в C ++?
  • C # TcpClient: отправлять сериализованные объекты с помощью разделителей?
  • Дессериализация XML для объектов в C #
  • Можете ли вы указать формат для XmlSerialization datetime?
  • Как использовать Gson API Google для десериализации JSON правильно?
  • Дессериализация Json в другую иерархию classов с использованием Jackson
  • Каковы недостатки встроенной сериализации на основе BinaryFormatter .Net?
  • Давайте будем гением компьютера.