Java Serialization

Introduction to Java Serialization

आप कोई video game खेल रहे है और उसमे आप बहुत आगे जा चुके है। अब आपको आपकी माँ खाना खाने के लिए बुलाती है। और आप video game बंद करके खाना खाने चल जाते है। थोड़ी देर बाद आप वापस आते है। और video game start करते है। आपने game को जँहा छोड़ा था game वापस वँही से start हो जाता है। कल्पना कीजिये कैसा हो यदि आपको ये game शुरू से खेलना पड़े। लेकिन ऐसा नहीं होता है। इसी प्रकार आपके program में कुछ ऐसी processing हो सकती है जिसे आप थोड़े समय बाद वापस उसी जगह से शुरू कर सकते है। Java के इस feature को Serialization कहते है।

Serialization में आप object की state को save करते है। जैसे की आप कोई music player बना रहे है। तो आपको उसमे pause और play का feature जरूर add करना पड़ेगा। यदि यूज़र song को pause करके जब वापस play करता है और song शुरू से शुरू हो जाता है तो यूज़र को आपका music player बिलकुल पसंद नहीं आएगा। ऐसे situation में आप serialization को यूज़ कर सकते है।

जब आप किसी object की state को save करते है तो वो process serialization कहलाती है। और जब आप उस object को restore करते है तो वो process de-serialization कहलाती है। Object की state आप byte stream के द्वारा किसी file में store करवाते है।

तो आखिर क्या होता है जब आप किसी object को serialize करते है। जब आप किसी object को serialize करते है तो उसके data members की value file में store हो जाती है। जैसे की यदि कोई variable है EmployeeName और ये किसी employee का नाम store करता है। तो ये variable उस नाम के साथ file में store हो जाता है। जब आप object को De-serialize करते है तो वापस ये value memory में load हो जाती है।

Serializable Interface

किसी object को serialize करना बहुत आसान है। इसके लिए आपको serializable interface implement करना होता है। जो class serializable interface करती है उसके objects ही serialize किये जा सकते है।

class ClassToSerialize implements Serializable
{
    String Name = "YourName";
    int Age = 24;
 }

Serializing Objects

जब भी आप किसी object को serialize करते है तो एक file क्रिएट होती है और object की current state उस file में store हो जाती है। किसी भी object को serialize करने के लिए आप ObjectOutputStream class का object create करते है। जब आप इस class का object create तो उसमे FileOutputStream class का object argument की तरह pass करते है। इसके बाद ObjectOutputStream class के object पर writeObject() method call करते है। जो object आप serialize करना चाहते है उसे आप इस method में argument की तरह pass करते है।

ऊपर दिए उदाहरण में ये बताया गया की कैसे एक class serializable interface को implement करती है। अब आपको ये देखना है की इस class के objects को कैसे serialize किया जाता है। इसका उदाहरण निचे दिया जा रहा है।

import java.io.*;

public class HowToSerialize
{
    public static void main(String args[]) throws IOException
    {
         FileOutputStream fstream = new FileOutputStream("directory-address-of-file);
         ObjectOuputStream obstream = new ObjectOutputStream(fstream);
         ClassToSerialize CTS = new ClassToSerialize();
         obstream.writeObject(CTS);
    }
}

De-serializing Objects

जब आप किसी object की processing फिर से शुरू करना चाहते है तो उसकी पुरानी state file में से memory में load की जाती है। किसी object को वापस file से memory में load करने के लिए आप ObjectInputStream class का object create करते है। Object create करते समय आप इसमें FileInputStream class का object argument की तरह pass करते है। इसके बाद आप ObjectInputStream class के object पर readObject() method call करते है। ये method आपको उस class का object return करता है। इसलिए आप इसको उसी class के reference variable में cast करके store करवाते है।

import java.io.*;

public class HowToSerialize
{
    public static void main(String args[]) throws IOException, ClassNotFoundException
    {
          FileInputStream fstream = new FileInputStream("directory-address-of-file");
          ObjectInputStream obstream = new ObjectInputStream(fstream);
          ClassToSerialize CTS2 = (ClassToSerialize) obstream.readObject();
          System.out.println(CTS2.Name);
          System.out.println(CTS2.Age);
     }
}