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