Quantcast
Channel: Crunchify
Viewing all articles
Browse latest Browse all 1037

Java Transient Keyword Tutorial – A transient variable is a variable that can not be serialized

$
0
0

Java Transient Keyword Tutorial - Crunchify

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

  1. First let’s create a POJO object CrunchifyTransientVariableObject which implements Serializable.
  2. 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.

The post Java Transient Keyword Tutorial – A transient variable is a variable that can not be serialized appeared first on Crunchify.


Viewing all articles
Browse latest Browse all 1037

Trending Articles