Как я могу сериализовать объект, который не реализует Serializable? Я не могу отметить его Serializable, потому что класс из сторонней библиотеки.
Как сериализовать несериализуемое в Java?
Ответ 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. Он работает с несериализованными классами, но классы должны быть зарегистрированы заранее.