| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > как сериализовать несериализуемый объект? |
| Автор: Lakie 4.2.2008, 14:17 |
| Доброго времени суток всем! У меня возникла такая проблема: есть класс, который должен проводить сериализацию и десериализацию объекта. Как можно сделать так, чтоб в случае передачи несериализуемого обьекта в этот класс не генерировал NotSerializableException, а корректно самостоятельно сериализовывал этот обьект. |
| Автор: 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 | ||
спасибо, щас посмотрю
вообще-то я какраз и собираюсь сделать универсальный класс для сериализации |
| Автор: Lakie 4.2.2008, 16:18 |
| alex_nevolin, спасибо, статья хорошая, но не то, мне надо, чтоб можно было обойтись без Serializable и Externalizable, я ведь не знаю, наследует ли объект эти интерфейсы skyboy, я может неправильно понял, но в рефликсия не подходит.... если я ошибаюсь, обьясните новичку, как этим пользоваться |
| Автор: COVD 4.2.2008, 17:25 |
| Lakie, имплементация интерфейса Serializable - это всего лишь метка, ярлык, которым разработчики классов указывают, что класс можно сериализовать стандартным способом. Некоторые разновидности классов в принципе сериализовать нельзя, потому что их содержимое динамически меняется или это бесмысленно. Например, java.sql.ResultSet или классы, описывающие сетевые соединения. |
| Автор: Lakie 4.2.2008, 17:40 | ||
так что мне делать? мне необходимо, чтоб обьект превращелся в массив байтов, при этом неизвесно, сериализуем он или нет |
| Автор: alex_nevolin 4.2.2008, 18:10 |
| Lakie Как вы сериализуете java.sql.ResultSet? Вам же говорят что есть классы, сериализация которых очень сложна или невозможна без знаний внутренней реализации класса. Т.е. написать фреймворк который сереализует что угодно на мой взгляд нельзя. |
| Автор: COVD 4.2.2008, 19:01 | ||
я бы сказал - бессмысленна. Можно вручную сериализовать сокетное соединение, превратить его в массив байт и сохранить на диске, или переслать на другой компьютер. Потом восстановить из массива обьект сокетного соединения. Но этот обьект не будет представлять собой работающее соединение. Это введение в заблуждение потребителей сериализованных обьектов. Lakie - ваше задание имеет смысл только в ситуации, когда вы хотите сериализовать заведомо "сериализуемые" обьекты, разработчики которых просто "забыли" поставить на них "штампик" Serializable , т.е. как исправление упущений авторов классов. Если же разработчик класса сознательно не указал , что его класс можно сериализовать, т.е. класс бессмысленно сериализовать, то ничего хорошего из сериализации не выйдет. Если вы не имеете возможности обсуждать постановку задачи, то вам наверное надо делать свой сериализатор, который делает все то же, что и стандартный, за исключением проверки наличия "штампика" Serializable. |