Что именно означает, что класс находится Serializable
на Java? Или вообще, в этом отношении ...
java
serializable
Ритвик Бозе
источник
источник
Serializable
:Serializability of a class is enabled by the class implementing the java.io.Serializable interface. Classes that do not implement this interface will not have any of their state serialized or deserialized. All subtypes of a serializable class are themselves serializable. The serialization interface has no methods or fields and serves only to identify the semantics of being serializable.
Ответы:
Сериализация - это сохранение объекта из памяти в виде последовательности битов, например, для сохранения на диск. Десериализация противоположна - чтение данных с диска для гидратации / создания объекта.
В контексте вашего вопроса, это интерфейс, который, если реализован в классе, этот класс может автоматически сериализоваться и десериализироваться различными сериализаторами.
источник
Хотя большинство пользователей уже дали ответ, но я хотел бы добавить пример для тех, кто нуждается в нем, чтобы объяснить идею:
Допустим, у вас есть классный человек, подобный следующему:
а затем вы создаете объект, как это:
Вы можете сериализовать этот объект во множество потоков. Я сделаю это для двух потоков:
Сериализация на стандартный вывод:
Сериализация в файл:
Затем:
Десериализовать из файла:
источник
Это означает, что экземпляры класса можно превратить в поток байтов (например, чтобы сохранить в файл), а затем снова преобразовать обратно в классы. Эта перезагрузка может произойти в другом экземпляре программы или даже на другом компьютере. Тем не менее, сериализация (на любом языке) сопряжена с самыми разными проблемами, особенно если у вас есть ссылки на другие объекты внутри сериализуемого объекта.
источник
Вот подробное объяснение Сериализации : (мой собственный блог)
Сериализация:
Сериализация - это процесс сериализации состояния объекта, представленного и сохраненного в виде последовательности байтов. Это может быть сохранено в файле. Процесс чтения состояния объекта из файла и его восстановления называется десериализацией.
Зачем нужна сериализация?
В современной архитектуре всегда необходимо сохранять состояние объекта, а затем извлекать его. Например, в Hibernate, чтобы сохранить объект, мы должны сделать класс Serializable. Что он делает, так это то, что после сохранения состояния объекта в виде байтов его можно перенести в другую систему, которая затем может прочитать из состояния и извлечь класс. Состояние объекта может поступать из базы данных, другого jvm или отдельного компонента. С помощью сериализации мы можем получить состояние объекта.
Пример кода и объяснение:
Сначала давайте посмотрим на класс предметов:
В приведенном выше коде видно, что класс Item реализует Serializable .
Это интерфейс, который позволяет классу быть сериализуемым.
Теперь мы видим, что переменная serialVersionUID инициализируется переменной Long. Это число вычисляется компилятором на основе состояния класса и атрибутов класса. Это число, которое поможет jvm идентифицировать состояние объекта при чтении состояния объекта из файла.
Для этого мы можем взглянуть на официальную документацию Oracle:
Если вы заметили, что мы использовали другое ключевое слово, которое является временным .
Если поле не сериализуемо, оно должно быть помечено как переходное. Здесь мы отметили itemCostPrice как временный и не хотим, чтобы он был записан в файл
Теперь давайте посмотрим, как записать состояние объекта в файле, а затем прочитать его оттуда.
В приведенном выше примере мы видим пример сериализации и десериализации объекта.
Для этого мы использовали два класса. Для сериализации объекта мы использовали ObjectOutputStream. Мы использовали метод writeObject для записи объекта в файл.
Для десериализации мы использовали ObjectInputStream, который считывает объект из файла. Он использует readObject для чтения данных объекта из файла.
Вывод приведенного выше кода будет выглядеть так:
Обратите внимание, что itemCostPrice из десериализованного объекта имеет значение null, поскольку оно не было записано.
источник
Сериализация включает в себя сохранение текущего состояния объекта в поток и восстановление эквивалентного объекта из этого потока. Поток функционирует как контейнер для объекта
источник
Serializable вызывается как интерфейс, но больше похож на флаг подсистеме Serialization во время выполнения. Это говорит, что этот объект может быть сохранен. Все переменные экземпляра Objects, за исключением не сериализуемых объектов и помеченных как volatile, будут сохранены.
Представьте, что ваше приложение может изменить цвет в качестве опции, не оставляя этот параметр внешним, вам нужно будет менять цвет каждый раз, когда вы его запускаете.
источник
Сериализация - это метод хранения или записи объектов и данных в файлы. С помощью
ObjectOutputStream
иFileOutputStream
классов. Эти классы имеют свои специфические методы для сохранения объектов. лайкwriteObject();
для наглядного объяснения цифрами. Смотрите здесь для получения дополнительной информации
источник
Чтобы представить с другой точки зрения. Сериализация - это своего рода интерфейс, называемый «маркерный интерфейс». Интерфейс маркера - это интерфейс, который не содержит объявлений метода, а просто обозначает (или «маркирует») класс, который реализует интерфейс как имеющий некоторое свойство. Если вы понимаете полиморфизм, это будет иметь большой смысл. В случае интерфейса маркера Serializable метод ObjectOutputStream.write (Object) завершится ошибкой, если его аргумент не реализует интерфейс. Это потенциальная ошибка в Java, это мог быть ObjectOutputStream.write (Serializable)
Настоятельно рекомендуется: Читать статью 37 из книги «Эффективная Ява» Джошуа Блоха, чтобы узнать больше.
источник
Сериализация: запись состояния объекта в файл / сеть или где-либо еще. (Имеется в виду поддерживаемая форма Java-объекта для формы, поддерживаемой файлом или формы, поддерживаемой сетью)
Десериализация: чтение состояния объекта из файла / сети или из любого места. (Имеется в виду поддерживаемая форма файла / сети для формы, поддерживаемой объектом Java)
источник
Просто чтобы добавить к другим ответам и в отношении общности. Сериализация иногда называется архивированием, например, в Objective-C.
источник