Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Надеюсь, это имеет смысл.: -)

Ответ 2

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

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

Ответ 3

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

    public transient String description;

Ответ 4

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

Ответ 5

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