Serialized Object থেকে Data Deserialization

Java Technologies - অ্যাপাচি কমন্স আইও (Apache Common IO) Data Serialization এবং Deserialization |
157
157

Deserialization হল সেই প্রক্রিয়া যার মাধ্যমে একটি serialized object কে আবার তার original object আকারে পুনঃস্থাপন করা হয়। Java তে serialization এর মাধ্যমে একটি অবজেক্টকে বাইনারি ফরম্যাটে রূপান্তর করা হয়, এবং deserialization এর মাধ্যমে সেই বাইনারি ডেটা থেকে অবজেক্ট পুনরুদ্ধার করা হয়।

Apache Commons IO লাইব্রেরি সোজা ও সহজ উপায়ে deserialization প্রক্রিয়া পরিচালনার জন্য ইউটিলিটি সরবরাহ করে। এই লাইব্রেরির ObjectInputStream ক্লাসের মাধ্যমে ফাইল বা স্ট্রিম থেকে অবজেক্ট ডেসিরিয়ালাইজ করা যায়। তবে, এটি Java I/O API এর সাথে কাজ করার মাধ্যমে Apache Commons IO ব্যবহার করা যেতে পারে।

নিচে আমরা serialized object থেকে data deserialization এর কার্যক্রম বিস্তারিতভাবে দেখব।


1. Serialized Object তৈরি করা (Serialization)


যথাযথভাবে deserialization সম্পন্ন করার জন্য, প্রথমে একটি অবজেক্টকে serialization করতে হবে। এতে অবজেক্টটি বাইনারি ফরম্যাটে রূপান্তরিত হয়, যা পরে deserialize করা যাবে।

Object Serialization উদাহরণ:

import java.io.*;

class Person implements Serializable {
    private String name;
    private int age;

    // Constructor
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getter Methods
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

public class ObjectSerializationExample {
    public static void main(String[] args) {
        Person person = new Person("John Doe", 30);

        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
            // Serialize the object
            oos.writeObject(person);
            System.out.println("Object serialized successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

এখানে:

  • Person ক্লাসটি একটি সাধারণ serializable ক্লাস যা name এবং age এর প্রপার্টি ধারণ করে।
  • ObjectOutputStream এর মাধ্যমে person অবজেক্টটি ফাইলে সিরিয়ালাইজ করা হয়েছে।

2. Deserialization (ডেটা ডেসিরিয়ালাইজেশন)


Deserialization এর মাধ্যমে সিরিয়ালাইজড অবজেক্ট থেকে ডেটা পুনরুদ্ধার করা হয়। এখানে ObjectInputStream ব্যবহার করে ফাইল থেকে সিরিয়ালাইজড অবজেক্টকে পুনরুদ্ধার করা হয়।

Deserialization উদাহরণ:

import java.io.*;

class Person implements Serializable {
    private String name;
    private int age;

    // Constructor
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getter Methods
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

public class ObjectDeserializationExample {
    public static void main(String[] args) {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
            // Deserialize the object
            Person person = (Person) ois.readObject();

            // Display the deserialized object's data
            System.out.println("Deserialized Object:");
            System.out.println("Name: " + person.getName());
            System.out.println("Age: " + person.getAge());
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

এখানে:

  • ObjectInputStream ব্যবহার করে person.ser ফাইল থেকে Person অবজেক্টটি ডেসিরিয়ালাইজ করা হয়েছে।
  • সঠিকভাবে ডেসিরিয়ালাইজ করার পর, অবজেক্টের name এবং age প্রপার্টি প্রদর্শন করা হয়েছে।

3. Apache Commons IO ব্যবহার করে Deserialization


Apache Commons IO এর মাধ্যমে আপনি সরাসরি ObjectInputStream অথবা ObjectOutputStream ক্লাসের মাধ্যমে অবজেক্ট সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে পারবেন। তবে Apache Commons IO লাইব্রেরি সেগুলি সরাসরি পরিচালনা না করলেও, এটি stream management এবং I/O utilities এর জন্য সাহায্য করতে পারে। এখানে FileUtils এবং IOUtils ক্লাসের মাধ্যমে আরো সহজভাবে স্ট্রিমের সাথে কাজ করা যেতে পারে।

FileUtils এর মাধ্যমে Deserialization উদাহরণ:

import org.apache.commons.io.FileUtils;
import java.io.*;
import java.nio.file.FileSystems;
import java.nio.file.Files;

class Person implements Serializable {
    private String name;
    private int age;

    // Constructor
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getter Methods
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

public class ApacheCommonsDeserializationExample {
    public static void main(String[] args) {
        try {
            // Read the serialized object using FileUtils
            byte[] data = FileUtils.readFileToByteArray(new File("person.ser"));
            
            // Deserialize the object from byte array
            ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data));
            Person person = (Person) ois.readObject();

            // Display the deserialized object's data
            System.out.println("Deserialized Object:");
            System.out.println("Name: " + person.getName());
            System.out.println("Age: " + person.getAge());
            
            ois.close();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

এখানে:

  • FileUtils.readFileToByteArray() ব্যবহার করে person.ser ফাইলের কন্টেন্টকে একটি byte array এ রিড করা হয়েছে।
  • পরে ByteArrayInputStream এবং ObjectInputStream ব্যবহার করে সেই byte array থেকে অবজেক্ট ডেসিরিয়ালাইজ করা হয়েছে।

4. Performance Considerations for Deserialization


Deserialization প্রক্রিয়া কখনও কখনও ধীর হতে পারে, বিশেষত যখন বড় সাইজের অবজেক্ট বা কমপ্লেক্স অবজেক্ট মডেল ব্যবহৃত হয়। এর পারফরম্যান্স উন্নত করার জন্য কিছু সাধারণ কৌশল হতে পারে:

  1. ObjectInputStream এবং ObjectOutputStream ব্যবহারের সময় দ্রুত স্ট্রিম ব্যবস্থাপনা করা। যেমন, ছোট ফাইল বা অবজেক্ট রিড/রাইট করার সময় বাফারিং ব্যবহার করা (Buffered Streams)।
  2. Single Object Serialization এর পরিবর্তে Batch Processing ব্যবহার করা। একাধিক অবজেক্টের জন্য একই সময় একটি স্ট্রিম ব্যবহার করা।
  3. Compression ব্যবহার করা, যদি অবজেক্ট বড় হয় তবে তাকে compression করে সঞ্চয় করা যেতে পারে, যা ডেসিরিয়ালাইজেশন প্রক্রিয়া ত্বরান্বিত করতে সাহায্য করবে।

5. Security Considerations


  • Deserialization একটি নিরাপত্তা ঝুঁকি তৈরি করতে পারে, কারণ সঠিকভাবে যাচাই না করা অবজেক্টগুলো সিস্টেমে ইনজেকশন বা ম্যালওয়্যার ছড়াতে পারে। তাই:
    • ডেসিরিয়ালাইজেশনের সময় ClassNotFoundException বা InvalidClassException যাচাই করতে হবে।
    • কেবলমাত্র নির্দিষ্ট trusted sources থেকে অবজেক্ট ডেসিরিয়ালাইজ করা উচিত।

সারাংশ


Apache Commons IO লাইব্রেরি সরাসরি deserialization কাজের জন্য ব্যবহার না করলেও, এটি ফাইল এবং স্ট্রিম সম্পর্কিত সাধারণ কার্যক্রমে সহায়ক। Java I/O API এর মাধ্যমে সিরিয়ালাইজড অবজেক্ট থেকে ডেটা ডেসিরিয়ালাইজ করা সম্ভব এবং Apache Commons IO এর বিভিন্ন ইউটিলিটি যেমন FileUtils এবং IOUtils ব্যবহার করে ফাইলের ডেটা সহজেই পরিচালনা করা যেতে পারে। Performance এবং Security সম্পর্কে সচেতন থাকতে হবে যখন আপনি serialization এবং deserialization প্রক্রিয়া সম্পন্ন করেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion