Java - ObjectStreamClass Class



Introduction

The Java ObjectStreamClass class is Serialization's descriptor for classes. It contains the name and serialVersionUID of the class. The ObjectStreamClass for a specific class loaded in this Java VM can be found/created using the lookup method.

Class declaration

Following is the declaration for Java.io.ObjectStreamClass class −

public class ObjectStreamClass
   extends Object
      implements Serializable

Field

Following are the fields for Java.io.ObjectStreamClass class −

  • static ObjectStreamField[] NO_FIELDS − This is the serialPersistentFields value indicating no serializable fields.

Class methods

Sr.No. Method & Description
1 Class<?> forClass()

This method returns the class in the local VM that this version is mapped to.

2 ObjectStreamField getField(String name)

This method gets the field of this class by name.

3 ObjectStreamField[] getFields()

This method returns an array of the fields of this serializable class.

4 String getName()

This method returns the name of the class described by this descriptor.

5 long getSerialVersionUID()

This method returns the serialVersionUID for this class.

6 static ObjectStreamClass lookup(Class<?> cl)

This method finds the descriptor for a class that can be serialized.

7 static ObjectStreamClass lookupAny(Class<?> cl)

This method returns the descriptor for any class, regardless of whether it implements Serializable.

8 String toString()

This method returns a string describing this ObjectStreamClass.

Methods inherited

This class inherits methods from the following classes −

  • Java.io.Object

Example - Get the Class of a simple serializable object

The following example shows the usage of ObjectStreamClass forClass() method. We're using ObjectStreamClass.forClass() to inspect the class of a serialized object.

ObjectStreamClassDemo.java

package com.tutorialspoint;

import java.io.ObjectStreamClass;
import java.io.Serializable;

public class ObjectStreamClassDemo {
   public static void main(String[] args) {
      ObjectStreamClass desc = ObjectStreamClass.lookup(Employee.class);
      if (desc != null) {
         System.out.println("Class from ObjectStreamClass: " + desc.forClass().getName());
      } else {
         System.out.println("Class not serializable.");
      }
   }

   static class Employee implements Serializable {
      private static final long serialVersionUID = 1L;
      String name;
      int id;
   }
}

Output

Let us compile and run the above program, this will produce the following result−

Class from ObjectStreamClass: com.tutorialspoint.ObjectStreamClassDemo$Employee

Explanation

  • ObjectStreamClass.lookup(Employee.class) returns metadata for the Employee class.

  • forClass() gives back the original Class object.

  • Helpful when reflecting over serialized types.

Example - Inspect a field in a simple serializable class

The following example shows the usage of ObjectStreamClass getField(String name) method. We're getting metadata for a field named "username" in a User class.

ObjectStreamClassDemo.java

package com.tutorialspoint;

import java.io.ObjectStreamClass;
import java.io.ObjectStreamField;
import java.io.Serializable;

public class ObjectStreamClassDemo {
   public static void main(String[] args) {
      ObjectStreamClass osc = ObjectStreamClass.lookup(User.class);
      ObjectStreamField field = osc.getField("username");

      if (field != null) {
         System.out.println("Field name: " + field.getName());
         System.out.println("Field type: " + field.getType().getSimpleName());
      } else {
         System.out.println("Field 'username' not found.");
      }
   }

   static class User implements Serializable {
      private static final long serialVersionUID = 1L;
      String username;
      int age;
   }
}

Output

Let us compile and run the above program, this will produce the following result−

Field name: username
Field type: String

Explanation

  • ObjectStreamClass.lookup(User.class) gets the serialization metadata for User.

  • getField("username") returns the ObjectStreamField representing that field.

  • You can then access its name, type, and other properties.

Example - Print names of multiple serializable classes dynamically

The following example shows the usage of ObjectStreamClass getName() method. We're iterating through a list of classes and printing their names using ObjectStreamClass.getName().

ObjectStreamClassDemo.java

package com.tutorialspoint;

import java.io.ObjectStreamClass;
import java.io.Serializable;
import java.util.List;

public class ObjectStreamClassDemo {
   public static void main(String[] args) {
      List<Class<?>> classes = List.of(Order.class, String.class, Integer.class);

      for (Class<?> clazz : classes) {
         ObjectStreamClass osc = ObjectStreamClass.lookup(clazz);
         if (osc != null) {
            System.out.println("Serializable: " + osc.getName());
         } else {
            System.out.println("Not serializable: " + clazz.getName());
         }
      }
   }

   static class Order implements Serializable {
      private static final long serialVersionUID = 1L;
      String item;
      int quantity;
   }
}

Output

Let us compile and run the above program, this will produce the following result−

Serializable: com.tutorialspoint.ObjectStreamClassDemo$Order
Serializable: java.lang.String
Serializable: java.lang.Integer

Explanation

  • getName() gives you the class names, whether built-in (String, Integer) or custom (Order).

  • This is useful for analyzing types at runtime in generic serialization utilities.

Advertisements
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy