Понимание переходных переменных в Java

Сериализация в Java - это механизм записи состояния объекта в поток байтов, а десериализация - это процесс преобразования потока байтов обратно в копию исходного объекта. Подробнее о ... Сериализация Java

Ключевое слово переходного процесса

Ключевое слово переходного процесса в Java используется для указания того, что поле не должно быть сериализовано. В Java по умолчанию все переменные объекта преобразуются в постоянное состояние. В редких случаях вам может понадобиться избегать сохранения некоторых переменных, потому что вам не нужно сохранять эти переменные. Таким образом, вы можете объявить эти переменные переходными. Это означает, что, когда JVM встречает ключевое слово переходного процесса, оно игнорирует исходное значение переменной и сохраняет значение по умолчанию для этого типа данных переменной. Это основная цель ключевого слова transient. Хорошая привычка использовать переходное ключевое слово с закрытыми конфиденциальными полями класса во время сериализации. Вероятно, лучшим примером является поле Thread. Обычно нет причин сериализовать Thread, поскольку его состояние очень «специфично для потока».

Пример

 
import Java.io.*;
class Student implements Serializable
{
  int id;
  String name;
  transient int age;
  Student(int id, String name,int age)  {
    this.id = id;
    this.name = name;
    this.age = age;
  }
}

Сериализация объекта

 
public class TestClass{
  public static void main(String[] args) {
    try{
      Student st = new Student(101,"John",10);
      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);
  }
}

Когда вы пытаетесь десериализовать, вы не получите назад переходное поле «возраст», потому что оно не сериализовано.

Источник: http://net-informations.com/Java/cJava/transient.htm

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