Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java 직렬화에서 final이 일시적으로 어떻게 작동합니까?

<시간/>

Java에서 직렬화는 객체의 상태를 바이트 스트림에 기록하여 네트워크를 통해 전송할 수 있는 개념입니다(JPA 및 RMI와 같은 기술 사용).

일시적인 변수 − 과도 변수의 값은 고려되지 않습니다(직렬화 프로세스에서 제외됨). 즉, 임시 변수를 선언할 때 직렬화 해제 후 해당 값은 항상 null, false 또는 0(기본값)이 됩니다.

따라서 클래스의 개체를 직렬화하는 동안 JVM이 특정 인스턴스 변수를 무시하도록 하려면 임시로 선언해야 합니다.

public transient int limit = 55; // will not persist
public int b; // will persist

다음 자바 프로그램에서 Student 클래스는 두 개의 인스턴스 변수 name과 age를 가지며 여기서 age는 일시적으로 선언됩니다. SerializeExample이라는 다른 클래스에서 우리는 Student 개체를 직렬화 및 살균 해제하고 해당 인스턴스 변수를 표시하려고 합니다. 나이는 보이지 않게(일시적으로) 만들어졌기 때문에 이름 값만 표시됩니다.

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Student implements Serializable {
   private String name;
   private transient int age;
   public Student(String name, int age) {
      this.name = name;
      this.age = age;
   }
   public void display() {
      System.out.println("Name: "+this.name);
      System.out.println("Age: "+this.age);
   }
}
public class SerializeExample {
   public static void main(String args[]) throws Exception {
      //Creating a Student object
      Student std = new Student("Sarmista", 27);
      //Serializing the object
      FileOutputStream fos = new FileOutputStream("e:\\student.ser");
      ObjectOutputStream oos = new ObjectOutputStream(fos);
      oos.writeObject(std);
      oos.close();
      fos.close();
      System.out.println("Values before de-serialization: ");
      std.display();
      System.out.println("Object serialized.......");
      //De-serializing the object
      FileInputStream fis = new FileInputStream("e:\\student.ser");
      ObjectInputStream ois = new ObjectInputStream(fis);
      Student deSerializedStd = (Student) ois.readObject();
      System.out.println("Object de-serialized.......");
      ois.close();
      fis.close();
      System.out.println("Values after de-serialization");
      deSerializedStd.display();
   }
}

출력

Values before de-serialization:
Name: Sarmista
Age: 27
Object serialized.......
Object de-serialized.......
Values after de-serialization
Name: Sarmista
Age: 0