Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ทำไม Transient Variable ถึงไม่ถูก Serialize ใน Java

Serialization เป็นกระบวนการทำให้ Java objects คงอยู่ในรูปแบบ byte sequence ที่รวมข้อมูลของออบเจ็กต์ รวมถึงข้อมูลเกี่ยวกับประเภทของออบเจ็กต์และชนิดข้อมูลที่เก็บอยู่ในออบเจ็กต์ Serialization คือการแปลง values/states ของ Java object เป็น bytes เพื่อส่ง over the network หรือบันทึกไว้ ในทางกลับกัน Deserialization คือการแปลง byte code กลับเป็น Java objects ที่สอดคล้องกัน

Transient variable คือตัวแปรที่ค่าของมัน ไม่ถูก serialized ระหว่างกระบวนการ serialization เราจะได้ default value สำหรับตัวแปรนี้เมื่อทำการ deserialize

Syntax

private transient <member-variable>;

ตัวอย่าง

import java.io.*;

class EmpInfo implements Serializable {
    String name;
    private transient int age;
    String occupation;

    public EmpInfo(String name, int age, String occupation) {
        this.name = name;
        this.age = age;
        this.occupation = occupation;
    }

    public String toString() {
        StringBuffer sb = new StringBuffer();
        sb.append("Name:" + "\n");
        sb.append(this.name + "\n");
        sb.append("Age:" + "\n");
        sb.append(this.age + "\n");
        sb.append("Occupation:" + "\n");
        sb.append(this.occupation);
        return sb.toString();
    }
}

// Main class
public class TransientVarTest {
    public static void main(String args[]) throws Exception {
        EmpInfo empInfo = new EmpInfo("Adithya", 30, "Java Developer");
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("empInfo"));
        oos.writeObject(empInfo);
        oos.close();

        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("empInfo"));
        EmpInfo empInfo1 = (EmpInfo) ois.readObject();
        System.out.println(empInfo1);
    }
}

Output

Name: Adithya
Age: 0
Occupation: Java Developer

ใน Output จะเห็นว่า age แสดงเป็น 0 (default value ของ int) เพราะถูกประกาศเป็น transient จึงไม่ถูก serialize