Как сериализовать несериализуемый в Java?
Как я могу сериализовать объект, который не реализует Сериализуемый? Я не могу отметить его как Serializable, потому что класс из сторонней библиотеки.
5 ответов
Вы не можете сериализовать класс, который не реализует Serializable
, но вы можете обернуть его в классе, который делает. Для этого нужно реализовать readObject
а также writeObject
в вашем классе-обертке, чтобы вы могли сериализовать его объекты по своему усмотрению.
- Во-первых, сделайте свое несериализуемое поле
transient
, - В
writeObject
первый звонокdefaultWriteObject
в потоке для хранения всех непереходных полей, затем вызовите другие методы для сериализации отдельных свойств вашего несериализуемого объекта. - В
readObject
первый звонокdefaultReadObject
в потоке, чтобы прочитать все непереходные поля, затем вызвать другие методы (соответствующие тем, которые вы добавили вwriteObject
) для десериализации вашего несериализуемого объекта.
Я надеюсь это имеет смысл.:-)
Оберните несериализуемый класс в собственный класс, который реализует Serializable
, В вашем классе writeObject
метод, делайте все необходимое для сериализации достаточной информации о несериализуемом объекте, чтобы ваш класс readObject
метод может восстановить это.
В качестве альтернативы, свяжитесь с разработчиком несериализуемого класса и попросите его исправить это.:-)
Если ваш класс уже реализует интерфейс Serializable (необходимый для сериализации), все, что вам нужно сделать, это объявить поле, которое вы не хотите сериализовать с помощью transient:
public transient String description;
Вы можете использовать Kryo. Это работает на не сериализованных классах, но классы должны быть зарегистрированы заранее.
Если класс не является окончательным, вы можете создать свой собственный класс, который расширяет его и реализует Serializable. Существует много других способов сериализации, кроме встроенного в Java механизма.