Question: What is transient variable?
Answer: Transient variable can't be serialize.
For example if a variable is declared as transient in a Serializable class and the class is written to an ObjectStream,
the value of the variable can't be written to the stream instead
when the class is retrieved from the ObjectStream the value of the variable becomes null.
package com.demo01;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class TestTransient{
public static void main(String[] args) {
User user=new User("511223445", "小向", 12);
System.out.println("Before Serialization: " + user);
try {
ObjectOutputStream objectOutputStream=new ObjectOutputStream(new FileOutputStream("user.ser"));
objectOutputStream.writeObject(user);
System.out.println("user is successfully Serialized ");
objectOutputStream.close();
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("user.ser"));
User user2=(User) objectInputStream.readObject();
objectInputStream.close();
System.out.println("User successfully created from Serialized data");
System.out.println("User after seriazliation : " + user2);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
class User implements Serializable {
private String idcard;
private transient String name;
private transient int age=1;//transient variable not serialized
public User(String idcard, String name, int age) {
this.idcard = idcard;
this.name = name;
this.age = age;
}
public String getIdcard() {
return idcard;
}
public void setIdcard(String idcard) {
this.idcard = idcard;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [idcard=" + idcard + ", name=" + name + ", age=" + age
+ "]";
}
}
Console:
Before Serialization: User [idcard=511223445, name=小向, age=12]
user is successfully Serialized
User successfully created from Serialized data
User after seriazliation : User [idcard=511223445, name=null, age=0]