Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Java — Сериализация

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

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

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

Классы ObjectInputStream и ObjectOutputStream — это высокоуровневые потоки, содержащие методы сериализации и десериализации объекта.

Класс ObjectOutputStream содержит множество методов записи для записи различных типов данных, но один из них особенно выделяется —

01

Приведенный выше метод сериализует объект и отправляет его в выходной поток. Точно так же класс ObjectInputStream содержит следующий метод для десериализации объекта —

10 

Этот метод извлекает следующий объект из потока и десериализует его. Возвращаемое значение — Object, поэтому вам нужно будет привести его к соответствующему типу данных.

Чтобы продемонстрировать, как сериализация работает в Java, я буду использовать класс Employee, который мы обсуждали в начале книги. Предположим, что у нас есть следующий класс Employee, который реализует интерфейс Serializable —

Пример

28

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

  • Класс должен реализовывать интерфейс java.io.Serializable.

  • Все поля в классе должны быть сериализуемыми. Если поле не сериализуемо, оно должно быть помечено как transient. .

Если вам интересно узнать, является ли стандартный класс Java сериализуемым или нет, ознакомьтесь с документацией по этому классу. Тест прост:если класс реализует java.io.Serializable, то он сериализуем; в противном случае это не так.

Сериализация объекта

Класс ObjectOutputStream используется для сериализации объекта. Следующая программа SerializeDemo создает экземпляр объекта Employee и сериализует его в файл.

После выполнения программы создается файл с именем employee.ser. Программа не генерирует никаких выходных данных, но изучает код и пытается определить, что делает программа.

Примечание − При сериализации объекта в файл стандартное соглашение в Java состоит в том, чтобы присвоить файлу .ser расширение.

Пример

32

Десериализация объекта

Следующая программа DeserializeDemo десериализует объект Employee, созданный в программе SerializeDemo. Изучите программу и попытайтесь определить ее вывод −

Пример

40

Это даст следующий результат —

Вывод

58

Здесь следует отметить следующие важные моменты —

  • Блок try/catch пытается перехватить исключение ClassNotFoundException, объявленное методом readObject(). Чтобы JVM могла десериализовать объект, она должна иметь возможность найти байт-код для класса. Если JVM не может найти класс во время десериализации объекта, она генерирует исключение ClassNotFoundException.

  • Обратите внимание, что возвращаемое значение readObject() приводится к ссылке Employee.

  • Значение поля SSN было 11122333 при сериализации объекта, но поскольку это поле является временным, это значение не было отправлено в выходной поток. Поле SSN десериализованного объекта Employee равно 0.


java

  1. Окончательное ключевое слово Java
  2. Оператор экземпляра Java
  3. Вложенный статический класс Java
  4. Анонимный класс Java
  5. Одноэлементный класс Java
  6. Java-отражение
  7. Класс Java ObjectOutputStream
  8. Дженерики Java
  9. Класс файла Java
  10. Java — объект и классы