Сериализация и десериализация в 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