Java Transient Keyword: Preventing Serialization of Sensitive Data
Learn how to use the transient
keyword in Java to prevent sensitive data from being serialized. This technique is particularly useful when you need to exclude certain fields, like passwords or temporary data, from the serialization process during object persistence.
Java Transient Keyword
Serialization in Java converts an object into a byte stream, which includes the data and type of the instance. Deserialization converts the byte stream back into the original object. During serialization, the transient
keyword is used to avoid serializing certain fields.
Why Use the Transient Keyword?
The transient
keyword can be used with class data members to prevent their serialization. For example, if a program stores a user's login details and password but you don't want to save the actual password, you can use the transient
keyword. The JVM will store the default value of the object instead of the original value when it reads the transient
keyword.
Syntax
private transient <member variable>;
or
transient private <member variable>;
When to Use the Transient Keyword?
- Use
transient
with data members derived from other data members within the same class instance. - Use
transient
for data members that do not depict the state of the object. - Use
transient
for data members of a non-serialized object or class.
Example of Java Transient Keyword
Consider a class Student
with three data members: id
, name
, and age
. If you serialize the object, all values will be serialized. However, if you don't want to serialize the age
value, you can declare it as transient
. When the object is deserialized, the transient
variable will have its default value.
PersistExample.java
import java.io.*;
public class Student implements Serializable {
int id;
String name;
transient int age; // Now it will not be serialized
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
}
class PersistExample {
public static void main(String args[]) throws Exception {
Student s1 = new Student(2023, "Sunil", 29); // Creating object
// Writing object into file
FileOutputStream f = new FileOutputStream("f.txt");
ObjectOutputStream out = new ObjectOutputStream(f);
out.writeObject(s1);
out.flush();
out.close();
f.close();
System.out.println("success");
}
}
Output
success
Now write the code for deserialization:
DePersist.java
import java.io.*;
class DePersist {
public static void main(String args[]) throws Exception {
ObjectInputStream in = new ObjectInputStream(new FileInputStream("f.txt"));
Student s = (Student) in.readObject();
System.out.println(s.id + " " + s.name + " " + s.age);
in.close();
}
}
Output
2023 Sunil 0
As seen, printing the age of the student returns 0 because the value of age
was not serialized.
In this article, we discussed the use of the transient
keyword in Java, when to use it, and its implementation in a Java program.