Сериализация и десериализация в Java
Содержание
Что такое фильтр ввода-вывода и как его использовать в Java?...
Интерфейс маркера
Интерфейс Serializable является «маркерным» интерфейсом. Это означает, что у него нет методов или полей, а просто «маркирует» класс как возможность сериализации. Когда виртуальная машина Java (JVM) встречает класс, который «помечен» как Serializable во время процесса сериализации, виртуальная машина предположит, что безопасно писать в поток. Все это происходит автоматически для программиста. Ниже приведены хорошо известные интерфейсы Marker.
Интерфейс Serializable является «маркерным» интерфейсом. Это означает, что у него нет методов или полей, а просто «маркирует» класс как возможность сериализации. Когда виртуальная машина Java (JVM) встречает класс, который «помечен» как Serializable во время процесса сериализации, виртуальная машина предположит, что безопасно писать в поток. Все это происходит автоматически для программиста. Ниже приведены хорошо известные интерфейсы Marker....
import Java.io.*;
class Student implements Serializable
{
int id;
String name;
Student(int id, String name) {
this.id = id;
this.name = name;
}
}
Сериализация объекта
public class TestClass{
public static void main(String[] args) {
try{
Student st = new Student(101,"John");
FileOutputStream fos = new FileOutputStream("student.info");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(st);
oos.close();
fos.close();
}catch(Exception e){
System.out.println(e);
}
}
}
Десериализация объекта
public class TestClass{
public static void main(String[] args) {
Student st = null;
try{
FileInputStream fis = new FileInputStream("student.info");
ObjectInputStream ois = new ObjectInputStream(fis);
st = (Student)ois.readObject();
}catch(Exception e){
System.out.println(e);
}
System.out.println(st.id);
System.out. println(st.name);
}
}
Сериализация и переменные
Переменные экземпляра:
Эти переменные сериализуются, поэтому во время десериализации мы вернем сериализованное состояние.
Статические переменные:
Эти переменные не сериализуются, поэтому во время десериализации статическое значение переменной будет загружено из класса. Но любая статическая переменная, которая предоставляется при инициализации класса, сериализуется. Однако в обычных случаях, когда вы укажете значение статической переменной в основном классе во время выполнения, не будет сериализовано.
Переходные переменные:
Переходные переменные не сериализуются, поэтому во время десериализации эти переменные будут инициализированы соответствующими значениями по умолчанию.
Переменные суперкласса:
Если суперкласс также реализовал интерфейс Serializable, то эти переменные будут сериализованы, иначе он не будет сериализовать переменные суперкласса. При десериализации Java Virtual Machine (JVM) запускает конструктор по умолчанию в суперклассе и заполняет значения по умолчанию. То же самое произойдет для всех суперклассов.
Источник: http://net-informations.com/Java/cJava/serialization.htm
