Можно ли автоматически сериализовать объект, зная файлы .class - PullRequest
0 голосов
/ 28 февраля 2012

.class файлы предоставляют чертежи для каждого типа объекта, а Java обладает широкими функциональными возможностями для извлечения свойств объекта, включая все его состояние.Так почему же нам все-таки нужно реализовать сериализуемый, можем ли мы просто сериализовать автоматически с учетом файлов .class?

Ответы [ 3 ]

3 голосов
/ 28 февраля 2012

Serializable интерфейс в java - это интерфейс Marker, в котором нет метода или полей.Он просто реализуется классом, чьи объекты мы можем захотеть сериализовать.

Более того, сериализация является дорогостоящим делом, поскольку (взято из Effective Java 2nd edition):

  1. Основная стоимость реализации Serializable заключается в том, что он снижает гибкость изменения реализации класса после его освобождения. Когда класс реализует Serializable, его кодирование потока байтов (или сериализованная форма) становится частью его экспортируемого API.Как только вы широко распространяете класс, вы, как правило, должны поддерживать сериализованную форму навсегда, так же, как вы обязаны поддерживать все остальные части экспортируемого API.

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

  3. Третья стоимость внедрения Serializable заключается в том, что он увеличивает нагрузку на тестирование, связанную с выпускомновая версия класса. При пересмотре сериализуемого класса важно проверить, можно ли сериализовать экземпляр в новом выпуске и десериализовать его в старых выпусках, и наоборот.

0 голосов
/ 28 февраля 2012

Учитывая, что один объект может ссылаться на кучу других, сериализация этого класса может стать очень интересной.Сериализация одного объекта может привести к сериализации тысяч объектов.Результаты могут быть легкими и блестящими, но в 99,9% случаев вы захотите контролировать и ограничивать хотя бы часть операции.Это особенно верно, когда вы перемещаете экземпляры классов через сокет, открытый на длительный срок.

Таким образом, маркировка класса «Сериализуемый» означает, что вы продумали все последствия.Они могут быть тривиальными, или они могут быть обширными и сложными.Но будьте осторожны: запись одного экземпляра класса в поток может привести к сериализации половины известной вселенной.

0 голосов
/ 28 февраля 2012

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

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