Skip to main content

Serialization & Deserialization Concpets In Java


Serialization is required to save that particular state of instance/object so that it can pass that object over to network to some receiver where it could be deserialized.

By Default all java class is not serializable but we can make it by implementing serialization interface.It is  marker interface which tells JVM to treat that class for serialization.

  • objectOutputStream.writeObject();
  • objectInputStream.readObject();


There are could scenarios possible while serialization with respect to inheritance.

1. Class which you want to serialize not having super class serializable.


    In this case we can serialize without any issue but we can loose setting values of  super class variables. As while deserialization constructors are not invoked generally for classes which are serializable but if classes which are not serializable (which is super class in this case) constructor will run for it & its all super classes. Due to this we will get default values rather then true values or state. Serializable subclass must take responsibility for storing/restoring any member values from the non-serializable super class.

                There is one more concern we need to take care of If the super class is not serializable, the deserialization mechanism needs to call the zero-argument constructor to make sure that the reconstituted object instance is initialized correctly. If we fail to specify a zero-argument constructor, the deserialization code will not warn you of this problem until your first attempt to deserialize an object of that class. There is no warning at compile time.So Make sure you have a default no-arg constructor.


2. Class which we want to serialize have to implement serializable interface but what if any of its member which is itself instance&  that instance is not serializable. 

     In this case we have to either modify member class to make it serializable by implementing serialization marker interface. Suppose we don't have access to source than we have to subclass & make it subclass serializable. we now need to use this as member class in object which we are serializing.

3. Suppose In above scenario if we don't have option to sub classing due to any reason like class is final or design constraints.

In that case if we want to save state of object having non serializable instance member, we have to do it manually. We have to mark this object member transient so that automatic mechanism wont invoke on it & it will skipped but we have to overcome this by manually implementing methods having same signature as we we use while serialization.

private void writeObject(objectOutputStream oos){
os.defaultWriteObject();
os.writeInt(instanceVariable.ObjectValue)
}

private void readObject(objectInputStream ois){
ois.defaultReadObject();
Objectclass obj= new Objectclass(ois.readInt());
}

4. last scenario in which you  want to prevent subclass serialization even if you are serializing any class.

           To prevent subclass from being serialized you have t implement writeObject() and readObject() method like above  and need to throw NotSerializableException from these methods. 





      

Comments

Popular posts from this blog

Conversion from Clob To String in java and Vice versa

/***reading Clob data from oracle table and setting to Pojo**/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import oracle.sql.CLOB;

import com.poc.one.pojo.StagedMessage;

public class MessageDao {
private static String url = "jdbc:oracle:thin:@172.22.22.198:1521:ORACLE";
private static String username = "ABC123";
private static String password = "ABC123";


public  List readClobToBO() throws Exception {

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(url, username, password);
PreparedStatement stmt = conn
.prepareStatement("SELECT ID, STORE_ID, MESSAGE_DATA FROM STAGED_MESSAGE ");
ResultSet resultSet = stmt.executeQuery();
List msgList= new ArrayList();

while (resultSet.next()) {

StagedMessage message = new StagedMessage();

message.setId(resultSet.getInt(1));
message.setStoreId(r…

Portable Java 8/ JDK8 setup without admin rights

Some time we got machine to work where we don't have access rights to install anything or if you do not want to install. You can get latest jdk running by this trick. Just follow step step & do comment if you like it.

Step by Step details to get running java from .exe setup without any admin rights. Get portable 7 zip from portableapps.comdownload java 8 from oracle  http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htmlopen 7 zip & extract jdk-8u102-windows-x64.exeyou will see below folders                .data                .pdata                .rdata                .reloc                .rsrc                .text                CERTIFICATE

          5.Go inside E:\jdk-8u102-windows-x64\.rsrc\1033\JAVA_CAB10you will find 111 file.

         6.extract it it some folder where you can find tools.zip again extract that to some folder say Java & copy it to very first folder of setup along with .data,.rsrc etc.
         7.Go to folder where you have co…

GOF Design pattern with Java & Real World Examples

What are design patterns? 

So basically these are just collection of best practices to solve recurring problem by different kind of class arrangement. These arrangement could be based on creation of object or structural basis or on basis of required behavior.




Creational Design Pattern
Prototype Designpattern we will like to use this designpattern whenever creation of initial object & setting required default values is costly. So we just create 1 object & later on whenever more objects required we can provide initial object by just cloning of given object.Java Example is java.lang.Object#clone()
Builder DesignPattern When we jave object structure are complex and complicated we would go for this. we will be separating object creation from internal representation. With help of some simple interface we would create complicated Object.
Singleton When we need one instance per JVM. Example : Java Run time environment Java.lang.System.  java.lang.StringBuilder, Spring Beans are singleton …