2012-05-24 2 views
4

У меня был взгляд вокруг, но ничто, кажется, не охватывает то, что я хочу сделать. Возможно ли сохранить объект экземпляра Class<?> во время выполнения? Если да, то как мне это сделать?Возможно ли сохранить файл Java Class <?>?

+0

Обратите внимание, что в этом случае Serialization и Externalization не сохраняют объект экземпляра. Они предназначены для сохранения достаточной информации, чтобы иметь возможность создавать новый объект с одинаковыми значениями в полях в той же или другой JVM. В частности, это не включает байтовые коды. Если вам тоже нужны, загляните в RMI. –

ответ

3

Вы прошли через Концепция сериализации с использованием java. this link поможет вам в решении вашей проблемы.

Короткий Java.lang.Serializable - ваш друг, чтобы сделать это.

2

Это набор комментариев к Java Serialization, а не ответ. Только некоторая информация не (пока) в других ответах.

Сериализация не только сохраняет объект, но и сохраняет все объекты, на которые он ссылается, прямо или косвенно. Это может быть очень круто, но вы можете написать одну маленькую объектную информацию и обнаружить, что вы неожиданно создали файл размером 10 МБ.

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

Если вы используете сокет, регулярно возвращайте поток ObjectOutput. В противном случае каждый раз, когда объект записывается иначе, чем первый, все, что отправляется, является ссылкой на исходные данные. Отправляйте один и тот же объект с последовательными значениями 1, 2, 3, 4 и 5, и чтение объекта будет иметь значения 1, 1, 1, 1 и 1. Кроме того, без сброса, использование памяти будет расти, поскольку оба объекта ObjectOutput и ObjectInput будет хранить почти все, что отправлено в память. (Хотя он будет хранить только одну копию каждого отдельного объекта.)

Сериализация не работает, если класс изменяется между тем, чтобы быть записанным и считанным. Тем не менее, разумная работа с системой экстернализации может обойтись. (И помните serialVersionUID, если ваша IDE позволит вам забыть.)

Внешняя политика позволяет вам написать код для сериализации класса. Это может быть очень полезно. Вы можете ввести номера версий и проверить их, и вы можете оставить данные, которые не нужны, или их можно воссоздать во время чтения. Однако требуется больше работы, чем автоматическая сериализация.

При чтении информации о внешности помните, что все ссылки могут ссылаться на объекты, данные которых еще не были получены; вы не можете последовательно суммировать суммы из списка дочерних объектов, например. Он может заплатить за вызов метода после readObject для установки значений, которые необходимо вычислить. (Часто бывает лучше отправить избыточную информацию, чем пересчитывать ее.)

Я все это усложнил.

Смежные вопросы