![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Да. Я по аналогии с xml сериализацией рассуждал. Спасибо! |
|||
|
||||
chand0s |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 19.2.2007 Репутация: 1 Всего: 3 |
Для общего развития
В Java есть 2 способа сделать объект сериализуемым: Serializable и Externalizable 1) Serializable При сериализации: определяются поля, которые сериализуются, , значения этих полей вычитываются через reflection и записываются в выходной поток. При десериализации: под объект выделяется место в памяти, и в эту память записываются значения из потока. Конструктор объекта не вызывается. Какие поля сериализуются/не сериализуются: поля static и transient не сериализуются. Все остальные сериализуются. Немного отдельно стоит механизм с объявлением в классе переменной serialPersistentFields. 2) Externalizable При сериализации: управление передается методу writeExternal сериализуемого объекта. Что писать в поток - решает сам объект. При десериализации: создается экземпляр объекта с помощью дефолтного конструктора и вызывается метод readExternal, который вычитывает данные из потока и присваивает значения своим полям. Какие поля можно сериализовать - а какие угодно. Вы сами это решаете в методе writeExternal. Некоторые выводы: 1) Для реализации Serializable наличие/отсутствие каких-либо конструкторов роли не играет. Для Externalizable нужен дефолтный public-конструктор (без параметров) 2) Serializable нормально сериализует/десериализует final-поля. Externalizable этого не умеет. 3) В случае Serializable static и transient поля не сериализуются. В случае Externalizable можно записать в поток все что угодно. 4) Если класс одновременно реализует Serializable и Externalizable интерфейсы - "победит" Externalizable Некоторые плюсы и минусы Externalizable: Плюс: скорость сериализации/десериализации и свобода обращения с данными. Минус: нарушение связности графа сериализуемых объектов (точнее, не нарушение, а необходимость самому за этим следить) Есть еще ряд интересных ньюансов, но что-то пост длинный слишком получается ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |