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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector