Serialization and Deserialization in Java
Serialization in java is a mechanism of writing the state of an object into a byte stream and deserialization is the process of converting a stream of bytes back into a copy of the original object. A Java object is serializable if its class or any of its superclasses implements either the java.io.Serializable interface or its subinterface, java.io.Externalizable.Marker Interface
The Serializable interface is a "marker" interface. This means that it has no methods or fields, but simply "marks" a class as being able to be serialized. When the Java Virtual Machine (JVM) encounters a class that is "marked" as Serializable during a serialization process, the Virtual Machine will assume that it is safe to write to the stream. These all happens somewhat automatically for a programmer. Following are the well-known Marker Interfaces.- rmi.Remote
- io.Serializable
- lang.Cloneable
import java.io.*;
class Student implements Serializable
{
int id;
String name;
Student(int id, String name) {
this.id = id;
this.name = name;
}
}
Serializing an Object
public class TestClass{
public static void main(String[] args) {
try{
Student st = new Student(101,"John");
FileOutputStream fos = new FileOutputStream("student.info");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(st);
oos.close();
fos.close();
}catch(Exception e){
System.out.println(e);
}
}
}
Deserialization of Object
public class TestClass{
public static void main(String[] args) {
Student st = null;
try{
FileInputStream fis = new FileInputStream("student.info");
ObjectInputStream ois = new ObjectInputStream(fis);
st = (Student)ois.readObject();
}catch(Exception e){
System.out.println(e);
}
System.out.println(st.id);
System.out. println(st.name);
}
}
Serialization and Variables
Instance Variables:
These variables are serialized, so during deserialization we will get back the serialized state.Static Variables:
These variables are not serialized, So during deserialization static variable value will loaded from the class. But, any static variable that is provided a value during class initialization is serialized . However in usual cases, where you would provide the value to a static variable at the main class at run-time would not be serialized.Transient Variables:
Transient variables are not serialized, so during deserialization those variables will be initialized with corresponding default values.Super class variables:
If super class also implemented Serializable interface then those variables will be serialized, otherwise it won't serialize the super class variables. While deserializing , Java Virtual Machine (JVM) will run default constructor in super class and populates the default values. Same thing will happen for all superclasses.
Related Topics
- Java Interview Questions-Core Faq - 1
- Java Interview Questions-Core Faq - 2
- Java Interview Questions-Core Faq - 3
- Important features of Java
- Difference between Java and JavaScript?
- What is the difference between JDK and JRE?
- What gives Java its 'write once and run anywhere' nature?
- What is JVM and is it platform independent?
- What is Just-In-Time (JIT) compiler?
- What is the garbage collector in Java?
- What is NullPointerException in Java
- Difference between Stack and Heap memory in Java
- How to set the maximum memory usage for JVM?
- What is numeric promotion?
- Why do we need Generic Types in Java?
- What does it mean to be static in Java?
- What are final variables in Java?
- How Do Annotations Work in Java?
- How do I use the ternary operator in Java?
- What is instanceof keyword in Java?
- How ClassLoader Works in Java?
- What are fail-safe and fail-fast Iterators in Java
- What are method references?
- "Cannot Find Symbol" compile error
- Difference between system.gc() and runtime.gc()
- How to convert TimeStamp to Date in Java?
- Does garbage collection guarantee that a program will not run out of memory?
- How setting an Object to null help Garbage Collection?
- How do objects become eligible for garbage collection?
- How to calculate date difference in Java
- Difference between Path and Classpath
- Is Java "pass-by-reference" or "pass-by-value"?
- Difference between static and nonstatic methods java
- Why Java does not support pointers?
- What is package in Java?
- What are wrapper classes?
- What is singleton class in Java?
- Difference between Java Local Variable, Instance Variable and a Class Variable?
- Can a top level class be private or protected in java
- Are Polymorphism , Overloading and Overriding similar concepts?
- How to Use Locks in Java
- Why Multiple Inheritance is Not Supported in Java
- Why Java is not a pure Object Oriented language?
- Why can't a Java class be declared as static?
- Difference between Abstract class and Interface in Java
- Why do I need to override the equals and hashCode methods in Java?
- Why does Java not support operator overloading?
- What’s meant by anonymous class in Java?
- Static Vs Dynamic class loading in Java
- Why am I getting a NoClassDefFoundError in Java?
- How to generate random integers within a specific range in Java
- What's the meaning of System.out.println in Java?
- What is the purpose of Runtime and System class?
- What is finally block in Java?
- What is difference between final, finally and finalize?
- What is try-with-resources in java?
- What is a stacktrace?
- What is the meaning of immutable in terms of String?
- What are different ways to create a string object in Java?
- Difference between String and StringBuffer/StringBuilder in Java
- What is the difference between creating String as new() and literal?
- How do I convert String to Date object in Java?
- How do I create a Java string from the contents of a file?
- What actually causes a StackOverflow error in Java?
- Why is char[] preferred over String for storage of password in Java
- What is I/O Filter and how do I use it in Java?
- Understanding transient variables in Java
- What is Externalizable in Java?
- What is the purpose of serialization/deserialization in Java?
- What is the Difference between byte stream and Character streams
- How to append text to an existing file in Java
- Read/convert an InputStream to a String in Java
- What is the difference between Reader and InputStream in Java
- Introduction to Java threads
- What is synchronization Java?
- Static synchronization Vs non static synchronization in Java
- Java Thread Deadlock Tutorial
- What is Daemon thread in Java
- Difference between implements Runnable and extends Thread in Java
- What is the volatile keyword in Java
- What are the basic interfaces of Java Collections Framework
- What are the differences between ArrayList and Vector in Java
- What is the difference between ArrayList and LinkedList?
- What is the difference between List and Set in Java
- Difference between HashSet and HashMap in Java
- Difference between HashMap and Hashtable in Java?
- How does the hashCode() method of java works?
- Difference between capacity() and size() of Vector in Java
- What is a Java ClassNotFoundException?
- How to fix java.lang.UnsupportedClassVersionError