Графические интерфейсы пользователя Java. Тимур Машнин

Читать онлайн книгу.

Графические интерфейсы пользователя Java - Тимур Машнин


Скачать книгу
этим модификатором поля не записываются в поток байт при применении стандартного алгоритма сериализации.

      При десериализации объекта такие поля инициализируются значением по умолчанию.

      Этот модификатор применяется, например, если поле класса является объектом несериализуемого класса, или некоторые поля могут не сериализоваться из соображений безопасности, например, поле пароля, или значение поля корректно только в рамках текущего контекста.

      Вы можете контролировать уровень сериализации объекта.

      Есть несколько способов управления серилизацией:

      Это автоматическая сериализация, реализуемая интерфейсом Serializable.

      Программное обеспечение сериализации Java сериализует весь объект, за исключением полей transient или static.

      Интерфейс Serializable не объявляет никаких методов; он действует как маркер, сообщая инструментам сериализации объектов, что ваш класс сериализуется.

      Маркировка класса интерфейсом Serializable означает, что вы сообщаете виртуальной машине Java (JVM), что ваш класс будет работать с сериализацией по умолчанию.

      Классы, которые реализуют Serializable, должны иметь доступ к конструктору без аргументов супертипа.

      Этот конструктор будет вызываться, когда объект будет «восстанавливаться» из файла. ser, в котором хранится сериализованный объект.

      Вам не нужно реализовывать Serializable в вашем классе, если он уже реализован в суперклассе.

      Все поля, кроме полей transient или static, сериализуются.

      Используйте модификатор transient, чтобы указать поля, которые вы не хотите сериализовать, и указать классы, которые не являются сериализуемыми.

      Если объект однажды уже записанный в поток, спустя какое-то время записывается в него снова, то по умолчанию, ObjectOutputStream сохраняет ссылки на объекты, которые в него записываются.

      Это означает, что, если состояние записываемого объекта, который уже был записан, будет записано снова, новое состояние не сохраняется.

      Существует два способа это исправить.

      Во-первых, вы можете каждый раз после вызова метода записи закрывать поток, а затем открывать его снова.

      Во-вторых, вы можете вызвать метод ObjectOutputStream.reset, который сигнализирует потоку о том, что необходимо освободить кэш от ссылок, которые он хранит, чтобы новые вызовы методов записи действительно записывали данные.

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

      Классы, требующие специальной обработки во время процесса сериализации и десериализации, должны определить эти методы с этими точными сигнатурами.

      Метод writeObject класса определяет сериализацию объекта.

      А метод readObject восстанавливает поток данных, который вы определили с помощью writeObject.

      Если же вы хотите полностью контролировать сериализацию объекта, используйте интерфейс Externalizable, например, при записи и чтении определенного формата файла.

      Для использования интерфейса Externalizable вам необходимо реализовать два метода: readExternal


Скачать книгу