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