2009-03-03 5 views
19

Можно создать дубликат:
What is object serialization?Что такое сериализация в Java?

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

Что такое сериализация и какие выгоды у нее есть?

+0

Подробное описание см. В возможном дублировании. –

ответ

41

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

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

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

6

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

4

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

2

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

6

Java Serialization - это способ сохранения объектов.

Лучше всего применять класс serialisable для объявления 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(); 
} 

Это, вероятно, не самая лучшая мысль из системы в мире (хотя это гораздо лучше, чем многие люди дают ему кредит для).

28

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

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

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

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

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

+23

Скопировано из этой ссылки ??? По крайней мере, попробуйте изменить слова. http://javapapers.com/core-java/java-serialization/ – Konza