In Java, transient fields are excluded in the serialization process. In short, when we save an object into a file (serialization), all transient fields are ignored.
1. POJO + transient
Review the following Person class; the salary field is transient.
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
// ignore this field
private transient BigDecimal salary;
//...
}
2. Serialization
2.1 During the serialization, the transient field salary will exclude.
ObjectUtils.java
package com.favtuts.io.object;
import java.io.*;
import java.math.BigDecimal;
public class ObjectUtils {
public static void main(String[] args) throws IOException, ClassNotFoundException {
Person person = new Person("favtuts", 40, new BigDecimal(900));
// object -> file
try (FileOutputStream fos = new FileOutputStream("person.obj");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(person);
oos.flush();
}
Person result = null;
// file -> object
try (FileInputStream fis = new FileInputStream("person.obj");
ObjectInputStream ois = new ObjectInputStream(fis)) {
result = (Person) ois.readObject();
}
System.out.println(result);
}
}
Output
Person{name='favtuts', age=40, salary=null}
2.2 Now, we removed the transient keyword.
Person.java
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
private BigDecimal salary;
//...
}
Rerun it, this time, the salary field will be displayed.
Person{name='favtuts', age=40, salary=900}
Download Source Code
$ git clone https://github.com/favtuts/java-core-tutorials-examples
$ cd java-io/object