Лабораторная работа: Сериализация объектов
Десериализация происходит так же просто, как и сериализация:
ObjectlnputStream ois = new ObjectInputStream (
new FilelnputStream («myobjects.ser»));
MyClass mcl = (MyClass) ois.readObject();
int[] a = (int[]) ois.readObject();
String s = (String) ois.readObject();
Date d = (Date) ois.readObject();
Приложение 6. Клонирование при помощи сериализации
Под клонированием объекта подразумевают получение его точной копии, независимой от оригинала. Таким образом, изменение параметров объекта-клона не влияет на оригинал, верно и обратное: изменение оригинала не влияет на клон.
Сериализация – один из методов для клонирования объектов. Суть его состоит в следующем: записать исходный объект в поток вывода, а затем считать обратно. В результате получается совершенно новый объект, по свойствам идентичный оригиналу.
Необходимо понимать, что данный способ не является оптимальным в силу следующих причин:
– объект, клонируемый таким образом, должен быть сериализуемым, что справедливо далеко не для всех объектов.
– клонирование сериализацией работает несколько медленнее обчного метода клонирования.
Впрочем, в случаях когда скорость написания кода становится важнее оптимизации скорости выполнения, этот метод оказывается как нельзя кстати.
Для реализации метода рекомендуется использовать следующую схему.
– Создаётся класс SerialCloneable, имплементирующий интерфейсы Cloneable и Serializable.
– Класс SerialCloneable имеет единственный метод clone(), в котором происходит сериализация объекта. Метод clone() возвращает объект из входного потока.
– Класс, который должен содержать поддержку клонирования, наследуется от класса SerialCloneable.
Приложение 7. Пример кода классов Employee и Manager
public class Manager extends Employee {
private Employee secretary;
public Manager (String n, double s, int year, int month, int day) {
super (n, s, year, month, day);
secretary = null;
}
public void setSecretary (Employee s) {
secretary = s;
}
}
public class Employee implements Serializable {