- Java.io - Home
- Java.io - BufferedInputStream
- Java.io - BufferedOutputStream
- Java.io - BufferedReader
- Java.io - BufferedWriter
- Java.io - ByteArrayInputStream
- Java.io - ByteArrayOutputStream
- Java.io - CharArrayReader
- Java.io - CharArrayWriter
- Java.io - Console
- Java.io - DataInputStream
- Java.io - DataOutputStream
- Java.io - File
- Java.io - FileDescriptor
- Java.io - FileInputStream
- Java.io - FileOutputStream
- Java.io - FilePermission
- Java.io - FileReader
- Java.io - FileWriter
- Java.io - FilterInputStream
- Java.io - FilterOutputStream
- Java.io - FilterReader
- Java.io - FilterWriter
- Java.io - InputStream
- Java.io - InputStreamReader
- Java.io - LineNumberInputStream
- Java.io - LineNumberReader
- Java.io - ObjectInputStream
- Java.io - ObjectInputStream.GetField
- Java.io - ObjectOutputStream
- io - ObjectOutputStream.PutField
- Java.io - ObjectStreamClass
- Java.io - ObjectStreamField
- Java.io - OutputStream
- Java.io - OutputStreamWriter
- Java.io - PipedInputStream
- Java.io - PipedOutputStream
- Java.io - PipedReader
- Java.io - PipedWriter
- Java.io - PrintStream
- Java.io - PrintWriter
- Java.io - PushbackInputStream
- Java.io - PushbackReader
- Java.io - RandomAccessFile
- Java.io - Reader
- Java.io - SequenceInputStream
- Java.io - SerializablePermission
- Java.io - StreamTokenizer
- Java.io - StringBufferInputStream
- Java.io - StringReader
- Java.io - StringWriter
- Java.io - Writer
- Java.io package Useful Resources
- Java.io - Discussion
Java - ObjectStreamField getOffset() method
Description
The Java ObjectStreamField getOffset() method gets offset of field within instance data.
getOffset() returns the offset position of a field within the object layout for serialization.
It is mainly used internally by the serialization system to optimize performance.
-
For normal Java developers, it's rarely needed, but it can be useful if you are writing −
a custom serialization framework
performance tuning serialization
-
Important −
Offset values are meaningful only after an object has been serialized once.
It can often be 0 (default) unless you're deep into custom stream handling.
Declaration
Following is the declaration for java.io.ObjectStreamField.getOffset() method.
public int getOffset()
Parameters
NA
Return Value
This method returns the offset of this field.
Exception
NA
Example - Usage of ObjectStreamField getOffset() method
The following example shows the usage of ObjectStreamField getOffset() 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");
// get the offset of the field
System.out.println("" + field.getOffset());
// create a new object stream class for calendar
ObjectStreamClass osc2 = ObjectStreamClass.lookup(Calendar.class);
// get the field value from Calendar class
ObjectStreamField field2 = osc2.getField("lenient");
// get the offset of the field2
System.out.println("" + field2.getOffset());
}
}
Output
Let us compile and run the above program, this will produce the following result −
0 6
Example - Print offsets of fields of a class
The following example shows the usage of ObjectStreamField getOffset() method. We're printing the offset of each serializable field inside a Book class.
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(Book.class);
ObjectStreamField[] fields = osc.getFields();
System.out.println("Field offsets for Book:");
for (ObjectStreamField field : fields) {
System.out.println(" - " + field.getName() + " => offset: " + field.getOffset());
}
}
static class Book implements Serializable {
private static final long serialVersionUID = 1L;
String title;
int pages;
}
}
Output
Let us compile and run the above program, this will produce the following result−
Field offsets for Book: - title => offset: 0 - pages => offset: 0
Explanation
The offset may be 0 unless explicitly customized by internal serialization processing.
In default ObjectOutputStream, offsets don't usually matter unless advanced stream layouts are involved.
Example - Compare field offsets manually (show behavior)
The following example shows the usage of ObjectStreamField getOffset() method. We're checking and printing field names and offsets in an Employee class.
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(Employee.class);
ObjectStreamField[] fields = osc.getFields();
for (ObjectStreamField field : fields) {
System.out.println("Field: " + field.getName() + ", Offset: " + field.getOffset());
}
}
static class Employee implements Serializable {
private static final long serialVersionUID = 1L;
String name;
double salary;
int id;
}
}
Output
Let us compile and run the above program, this will produce the following result−
Field: name, Offset: 0 Field: salary, Offset: 4 Field: id, Offset: 0