If you have a requirement to serialize an object then you have an option to skip serialize specific field by marking it as transient.
transient is a Java keyword which marks a member variable not to be serialized when it is persisted to stream of bytes.
When do you need to serialize an object?
When a Java object is transferred through the network, the object needs to be serialized. Serialization converts the object state to serial bytes.
Let’s take a look at transient Java example
- First let’s create a POJO object CrunchifyTransientVariableObject which implements Serializable.
- Create main class CrunchifyJavaTransientFieldTutorial.
- Create an Object.
- Write an Object to file. A file output stream is an output stream for writing data to a File or to a FileDescriptor.
- Read an Object.
- If field is transient – it will return 0 (for int), null (for string field) and so on.
CrunchifyTransientVariableObject.java
package crunchify.com.tutorial;
import java.io.Serializable;
// Serializability of a class is enabled by the class implementing the java.io.Serializable interface.
// Warning: Deserialization of untrusted data is inherently dangerous and should be avoided.
// Untrusted data should be carefully validated according to the "Serialization and Deserialization" section of the . describes best practices for defensive use of serial filters.
public class CrunchifyTransientVariableObject implements Serializable {
private static final long serialVersionUID = 1L;
private String companyName;
private int employeeCount;
// A transient variable is a variable that can not be serialized.
// Variables may be marked transient to indicate that they are not part of the persistent state of an object.
private transient int homeZip;
// private int homeZip;
public String getName() {
return companyName;
}
public void setName(String companyName) {
this.companyName = companyName;
}
public int getEmployeeCount() {
return employeeCount;
}
public void setEmployeeCount(int employeeCount) {
this.employeeCount = employeeCount;
}
public int getZip() {
return homeZip;
}
public void setZip(int homeZip) {
this.homeZip = homeZip;
}
public CrunchifyTransientVariableObject(String companyName, int employeeCount, int homeZip) {
this.companyName = companyName;
this.employeeCount = employeeCount;
this.homeZip = homeZip;
}
}
Here homeZip is a transient variable.
CrunchifyJavaTransientFieldTutorial.java
package crunchify.com.tutorial;
import java.io.*;
/**
* @author Crunchify.com
*
* Java Transient Keyword Tutorial - A transient variable is a variable that can not be serialized.
*
*/
public class CrunchifyJavaTransientFieldTutorial {
public static void main(String[] args) {
CrunchifyTransientVariableObject crunchifyCompany = new CrunchifyTransientVariableObject("Crunchify.com", 5, 95112);
// A file output stream is an output stream for writing data to a File or to a FileDescriptor.
try (FileOutputStream crunchifyFOS = new FileOutputStream("crunchify.obj");
ObjectOutputStream crunchifyOOS = new ObjectOutputStream(crunchifyFOS)) {
crunchifyOOS.writeObject(crunchifyCompany);
crunchifyOOS.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
CrunchifyTransientVariableObject crunchifyResult = null;
// A FileInputStream obtains input bytes from a file in a file system. What files are available depends on the host environment.
try (FileInputStream crunchifyFOS = new FileInputStream("crunchify.obj");
ObjectInputStream crunchifyOIS = new ObjectInputStream(crunchifyFOS)) {
crunchifyResult = (CrunchifyTransientVariableObject) crunchifyOIS.readObject();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println("Company Name: " + crunchifyResult.getName());
System.out.println("Number of Employee: " + crunchifyResult.getEmployeeCount());
System.out.println("Zip code: " + crunchifyResult.getZip());
}
}
Run program:
With transient keyword:
/Library/Java/JavaVirtualMachines/jdk-14.0.2.jdk/Contents/Home/bin/java -javaagent Company Name: Crunchify.com Number of Employee: 5 Zip code: 0 Process finished with exit code 0
Without transient keyword:
Remove transient keyword in above program and re-run a program again.
/Library/Java/JavaVirtualMachines/jdk-14.0.2.jdk/Contents/Home/bin/java -javaagent Company Name: Crunchify.com Number of Employee: 5 Zip code: 95112 Process finished with exit code 0
As you see above, now we were able to see zip code 95112.
Please let me know if you see any issue serializing an object and transient variable.

