Как сериализовать несериализуемый в Java? - PullRequest
32 голосов
/ 28 мая 2011

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

Ответы [ 5 ]

26 голосов
/ 28 мая 2011

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

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

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

5 голосов
/ 28 мая 2011

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

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

2 голосов
/ 03 декабря 2012

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

    public transient String description;
1 голос
/ 31 октября 2017

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

0 голосов
/ 28 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...