Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > как сериализовать несериализуемый объект?


Автор: Lakie 4.2.2008, 14:17
Доброго времени суток всем!
У меня возникла такая проблема:  есть класс, который должен проводить сериализацию и десериализацию объекта.
Как можно сделать так, чтоб в случае передачи несериализуемого обьекта в этот класс не генерировал NotSerializableException, а корректно самостоятельно сериализовывал этот обьект. smile 

Автор: skyboy 4.2.2008, 14:53
через http://en.wikipedia.org/wiki/Reflection_(computer_science)#Java http://forum.vingrad.ru/faq/topic-157972.html. только не знаю, насколько это оптимально...
иы собираешься писать универсальный класс сериализатор? если нет - то не проще ли сделать-таки класс, реализующий Serializeable?

Автор: alex_nevolin 4.2.2008, 15:40
Вот http://www.skipy.ru/technics/serialization.html

Автор: Lakie 4.2.2008, 15:41
спасибо, щас посмотрю
Цитата

иы собираешься писать универсальный класс сериализатор

вообще-то я какраз и собираюсь сделать универсальный класс для сериализации smile

Автор: Lakie 4.2.2008, 16:18
alex_nevolin, спасибо, статья хорошая, но не то, мне надо, чтоб можно было обойтись без Serializable и Externalizable, я ведь не знаю, наследует ли объект эти интерфейсы

skyboy, я может неправильно понял, но в рефликсия не подходит.... если я ошибаюсь, обьясните новичку, как этим пользоваться smile 

Автор: COVD 4.2.2008, 17:25
Lakie, имплементация интерфейса Serializable - это всего лишь метка, ярлык, которым разработчики классов указывают, что класс можно сериализовать стандартным способом. Некоторые разновидности классов в принципе сериализовать нельзя, потому что их содержимое динамически меняется или это бесмысленно. Например, java.sql.ResultSet или классы, описывающие сетевые соединения. 

Автор: Lakie 4.2.2008, 17:40
Цитата

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

так что мне делать? мне необходимо, чтоб обьект превращелся в массив байтов, при этом неизвесно, сериализуем он или нет

Автор: alex_nevolin 4.2.2008, 18:10
Lakie
Как вы сериализуете java.sql.ResultSet? 
Вам же говорят что есть классы, сериализация которых очень сложна или невозможна без знаний внутренней реализации класса.
Т.е. написать фреймворк который сереализует что угодно на мой взгляд нельзя.

Автор: COVD 4.2.2008, 19:01
Цитата

есть классы, сериализация которых очень сложна или невозможна 


я бы сказал - бессмысленна. Можно вручную сериализовать сокетное соединение, превратить его в массив байт и сохранить на диске, или переслать на другой компьютер. Потом восстановить из массива обьект сокетного соединения. Но этот обьект не будет представлять собой работающее соединение. Это введение в заблуждение потребителей сериализованных обьектов.  

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)