Лекция: Сериализация класса
Для того, чтобы экземпляр класса можно было сохранять (например в файл) и потом восстанавливать (например, из файла), класс должен быть сериализуемым. В этом случае сохранение / чтение экземпляра класса будет происходить не поэлементно (что тоже возможно), а целиком.
Вообще же говоря, сериализация — это представление некого объекта в последовательной форме, а десериализация — это восстановление объекта из последовательной формы.
Для того, чтобы класс стал сериализуемым, его надо просто объявить потомком интерфейса Serializable. Методов в этом интерфейсе нет.
Вот сразу пример сериализуемого класса:
import java.io.*;
public class Worker implements Serializable {
// Данные класса.
int age=0;
int yoe=0;
Worker(int age, int yoe){
this.age = age;
this.yoe = yoe;
}
// Метод main.
public static void main(String[] args)
throws IOException, ClassNotFoundException {
// Сериализация экземпляра класса.
Worker w = new Worker(22, 2);
ObjectOutputStream os = new ObjectOutputStream(
new FileOutputStream(«1.txt»));
os.writeObject(w);
os.close();
// Десериализация экземпляра класса.
Worker w1 = new Worker(0, 0);
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream(«1.txt»));
w1 = (Worker)ois.readObject();
ois.close();
System.out.println(«age = » + w1.age + ", yoe = " + w1.yoe);
}
}
Статический метод main, по идее, должен был бы быть в отдельном классе. Мы поместили его в этот же класс для упрощения. В этом методе мы сериализуем в файл 1.txt экземпляр нашего класса (со значениями полей 22 и 2) и потом десериализуем данные из этого файла в другой экземпляр этого же класса Worker. Результат будет вполне ожидаемым — значения полей в новом экземпляре класса будут такие же — 22 и 2.