Подтвердить что ты не робот

Что такое сериализация в Java?

Возможный дубликат:
Что такое сериализация объектов?

Я сделал небольшое приложение RSS Reader, используя Swing, и Eclipse продолжает говорить мне: "Сериализуемый класс MochaRSSView не объявляет статическое окончательное поле serialVersionUID типа long"

Что такое сериализация и какие преимущества у нее есть?

4b9b3361

Ответ 1

Serializable - это интерфейс-маркер, который сообщает JVM, что он может записать состояние объекта в какой-то поток (в основном, читать все члены и записывать свое состояние в поток или на диск или что-то еще). Механизм по умолчанию - это двоичный формат. Вы также можете использовать его для клонирования вещей или сохранения состояния между вызовами, отправки объектов по сети и т.д.

Вы можете позволить eclipse генерировать один для вас (в основном просто длинный случайный, но уникальный идентификатор). Это означает, что вы можете контролировать, когда считаете, что класс совместим с сериализованной версией, или нет.

(Обратите внимание: все переменные-члены, не являющиеся переходными, должны быть сериализуемого класса, или вы получите сообщение об ошибке - поскольку JVM будет рекурсивно проходить через структуру, записывая состояние каждого объекта до уровня написания примитивов ObjectOutputStream).

Ответ 2

Сериализация Java ----- Вы когда-нибудь видели, что находится внутри сериализованного объекта? Я объясню вам, что такое сериализация Java, а затем предоставит вам образец для сериализации. Наконец, самое главное, позволяет исследовать, что внутри сериализованного объекта и что это значит. Это внутренности сериализации Java и как это работает. Если вы хотите иметь собственную реализацию сериализации Java, эта статья предоставит вам хорошую платформу для запуска.

Что такое Java Serialization? Первичная цель сериализации Java состоит в том, чтобы записать объект в поток, чтобы его можно было транспортировать по сети, и этот объект можно снова перестроить. Когда есть две разные стороны, вам нужен протокол для повторного восстановления того же самого объекта. API-интерфейс Java-сериализации просто предоставляет вам это. Другие способы использования функции сериализации - это вы можете использовать ее для выполнения глубокой копии.

Почему я использовал "основную цель в вышеприведенном определении, иногда люди используют сериализацию Java в качестве замены базы данных. Просто местозаполнитель, в котором вы можете сохранить объект через сеансы. Это не основная цель сериализации Java. Иногда, когда я беру интервью у кандидатов на Java, я слышал, что они говорят, что сериализация Java используется для хранения (сохранения состояния) объекта и его получения. Они используют его в синониме с базой данных. Это неправильное восприятие для сериализации.

Как вы сериализуете? Когда вы хотите сериализовать объект, соответствующий класс должен реализовать сериализуемый интерфейс маркера. Он просто сообщает компилятору, что этот класс Java может быть сериализован. Вы можете пометить свойства, которые не должны быть сериализованы как переходные. Вы открываете поток и записываете в него объект. Java API позаботится о протоколе сериализации и сохраняет объект Java в файле в соответствии с протоколом. Де-сериализация - это процесс возврата объекта из файла в его первоначальную форму.

Здесь протокол означает понимание между персонализацией сериализации и де-сериализацией. Каким будет содержимое файла, содержащего сериализованный объект?

Ответ 3

Сериализация выписывает объект в форму, которая читается и позволяет воссоздать объект в другое время. Поэтому, если бы я создал виджет на компьютере A под одной JVM, сериализовал и сохранил его и отправил на компьютер B, работающий другим, другой JVm мог бы де-сериализовать его и воссоздать с теми же значениями и структурой

Ответ 4

Сериализация Java - это способ сохранения структур объектов.

Лучше всего использовать classisable class для объявления serialVersionUID как константы времени компиляции private static final long. Это используется для проверки совместимости данных объекта и кода класса.

Итак, почему Eclipse расскажет вам об этом? Вероятно, класс, который вы расширяете (или потенциально интерфейс, который вы реализуете) реализует java.io.Serializable. Это означает, что все подтипы, включая ваши, являются сериализуемыми. Почти наверняка вам все равно. Вы должны очистить предупреждения, применив @SuppressWarnings("serial") к классу или пакету (в package-info.java). Если вы хотите принудительно запретить сериализацию экземпляров вашего класса, добавьте (из памяти):

private static final java.io.ObjectStreamField[] serialPersistentFields = {
    null
};
private void writeObject(
    java.io.ObjectOutputStream ou
) throws java.io.IOException {
    throw new java.io.NotSerializableException();
}
private void readObject(
    java.io.ObjectInputStream in
) throws java.io.IOException, java.lang.ClassNotFoundException {
    throw new java.io.NotSerializableException();
}
private void readObjectNoData(
) throws java.io.ObjectStreamException {
    throw new java.io.NotSerializableException();
}

Вероятно, это не лучшая продуманная система в мире (хотя она намного лучше, чем многие люди дают ей кредит).

Ответ 5

Serialization - это процесс преобразования объекта в формат, сохраняемый на диске, для повторной загрузки его позднее. Проверьте ссылку для получения дополнительной информации!

Ответ 6

Сериализация - это способ взять объект (экземпляр вашего класса) и настроить его для транспорта - через сеть, на диск и т.д.