Java - ObjectStreamField isUnshared() method



Description

The Java ObjectStreamField isUnshared() method returns boolean value indicating whether or not if the serializable field represented by this ObjectStreamField instance is unshared.

  • isUnshared() returns true if the field is marked as unshared during serialization.

  • Normally, when objects are serialized, they are shared (references preserved).

  • If unshared, every reference is treated as a new, separate object when deserialized.

  • This affects object identity handling during deserialization.

In most default serialization, fields are shared, so isUnshared() usually returns false unless special customization is done.

Declaration

Following is the declaration for java.io.ObjectStreamField.isUnshared() method.

public boolean isUnshared()

Parameters

NA

Return Value

This method returns true if and only if this field is unshared.

Exception

NA

Example - Usage of ObjectStreamField isUnshared() method

The following example shows the usage of ObjectStreamField isUnshared() method.

ObjectStreamFieldDemo.java

package com.tutorialspoint;

import java.io.ObjectStreamClass;
import java.io.ObjectStreamField;
import java.util.Calendar;

public class ObjectStreamFieldDemo {
   public static void main(String[] args) {

      // create a new object stream class for Integers
      ObjectStreamClass osc = ObjectStreamClass.lookup(Integer.class);

      // get the field value from Integer class
      ObjectStreamField field = osc.getField("value");

      // check if field is primitive
      System.out.println("" + field.isUnshared());

      // create a new object stream class for calendar
      ObjectStreamClass osc2 = ObjectStreamClass.lookup(Calendar.class);

      // get the field value from Integer class
      ObjectStreamField field2 = osc2.getField("isSet");

      // check if field is primitive
      System.out.println("" + field2.isUnshared());
   }
}

Output

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

false
false

Example - Basic usage - Check if fields are unshared

The following example shows the usage of ObjectStreamField isUnshared() method. We're printing whether fields in a Document class are marked unshared.

ObjectStreamFieldDemo.java

package com.tutorialspoint;

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

public class ObjectStreamFieldDemo {
   public static void main(String[] args) {
      ObjectStreamClass osc = ObjectStreamClass.lookup(Document.class);
      ObjectStreamField[] fields = osc.getFields();

      System.out.println("Checking if fields are unshared:");
      for (ObjectStreamField field : fields) {
         System.out.println(" - " + field.getName() + " isUnshared: " + field.isUnshared());
      }
   }

   static class Document implements Serializable {
      private static final long serialVersionUID = 1L;
      String title;
      String content;
   }
}

Output

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

Checking if fields are unshared:
 - content isUnshared: false
 - title isUnshared: false

Explanation

  • By default, isUnshared() returns false for fields because standard serialization treats object references as shared.

Example - Conceptual - Custom serialization where unshared fields can be created

The following example shows the usage of ObjectStreamField isUnshared() method. We're simulating a setup where a field could be serialized unshared (theoretical, for understanding).

ObjectStreamFieldDemo.java

package com.tutorialspoint;

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

public class ObjectStreamFieldDemo {
   public static void main(String[] args) {
      ObjectStreamClass osc = ObjectStreamClass.lookup(Report.class);
      ObjectStreamField[] fields = osc.getFields();

      System.out.println("Fields and their unshared status:");
      for (ObjectStreamField field : fields) {
         System.out.println(" - " + field.getName() + ": isUnshared = " + field.isUnshared());
      }
   }

   static class Report implements Serializable {
      private static final long serialVersionUID = 1L;
      String summary;
      byte[] attachment;
   }
}

Output

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

Fields and their unshared status:
 - attachment: isUnshared = false
 - summary: isUnshared = false

Explanation

  • Again, fields are not unshared by default.

  • In real customization (with ObjectOutputStream.writeUnshared() and ObjectInputStream.readUnshared()), you could enforce that serialized fields are unshared.

  • But ObjectStreamField.isUnshared() by itself reflects what serialization metadata says, not runtime writing behavior unless specifically configured.

java_io_objectstreamfield.htm
Advertisements