Externalizable Interface এর ভূমিকা এবং ব্যবহার

Serialization এবং Externalizable Interface - জাভা আইও (Java.io Package) - Java Technologies

269

Externalizable একটি Java I/O ইন্টারফেস যা Serializable ইন্টারফেসের উন্নত সংস্করণ হিসেবে কাজ করে। যখন Serializable ইন্টারফেস ব্যবহার করে একটি অবজেক্টকে সেরিয়ালাইজ করা হয়, তখন জাভা স্বয়ংক্রিয়ভাবে ফিল্ডগুলির ডেটা সেরিয়ালাইজ করে। তবে, Externalizable ইন্টারফেস ব্যবহার করার মাধ্যমে আপনি কাস্টম সেরিয়ালাইজেশন কৌশল তৈরি করতে পারেন, যেখানে আপনি আপনার নির্দিষ্ট নিয়ম অনুসারে ডেটা লেখার এবং পড়ার প্রক্রিয়া নিয়ন্ত্রণ করতে পারবেন।

Externalizable Interface এর ভূমিকা:

Externalizable ইন্টারফেস দুটি মেথড writeExternal() এবং readExternal() ঘোষণা করে, যা ক্লাসটিকে কাস্টম সেরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন করার অনুমতি দেয়। এটি আপনাকে সেরিয়ালাইজেশন প্রক্রিয়াকে সম্পূর্ণভাবে নিয়ন্ত্রণ করার সুযোগ দেয়, যেখানে আপনি কেবলমাত্র আপনার প্রয়োজনীয় ডেটা সেরিয়ালাইজ করতে পারেন এবং ডেসিরিয়ালাইজেশন প্রক্রিয়া থেকে নির্দিষ্ট ডেটা বাদ দিতে পারেন।

Externalizable Interface এর প্রধান মেথড:

  1. writeExternal(ObjectOutput out):
    • এই মেথডটি অবজেক্টের ডেটা সেরিয়ালাইজ করার জন্য ব্যবহার করা হয়। আপনাকে ObjectOutput স্ট্রীমের মাধ্যমে অবজেক্টের ডেটা লিখতে হবে।
  2. readExternal(ObjectInput in):
    • এই মেথডটি অবজেক্টের ডেটা ডেসিরিয়ালাইজ করার জন্য ব্যবহৃত হয়। এখানে আপনি ObjectInput স্ট্রীম থেকে ডেটা পড়তে পারেন এবং অবজেক্টের প্রোপার্টিগুলিতে সেট করতে পারেন।

Externalizable Interface এর সুবিধা:

  1. Customized Serialization:
    • Externalizable এর মাধ্যমে আপনি সেরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন কৌশল কাস্টমাইজ করতে পারেন, যা আপনাকে শুধু প্রয়োজনীয় ডেটা সেরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে সহায়ক হয়।
  2. Control Over Data Serialization:
    • আপনি কোন ডেটা সেরিয়ালাইজ করবেন এবং কোনটি করবেন না তা সম্পূর্ণ নিয়ন্ত্রণ করতে পারবেন, যা Serializable ইন্টারফেসে করা সম্ভব নয়।
  3. Efficient Serialization:
    • যদি অবজেক্টের কিছু ডেটা কম্প্লেক্স বা বড় হয় এবং আপনি সেগুলি সেরিয়ালাইজ করতে চান না, তবে Externalizable ব্যবহারের মাধ্যমে আপনি সেগুলি বাদ দিতে পারেন।

Externalizable Interface এর ব্যবহার:

এখানে একটি উদাহরণ দেওয়া হল যেখানে Externalizable ইন্টারফেস ব্যবহার করে একটি অবজেক্টের ডেটা সেরিয়ালাইজ এবং ডেসিরিয়ালাইজ করা হবে।

Example: Using Externalizable Interface

import java.io.*;

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

    // Default constructor (required for Externalizable)
    public Person() {}

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

    // Custom serialization
    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
        out.writeObject(name);  // Only serialize 'name'
        out.writeInt(age);       // Serialize 'age'
    }

    // Custom deserialization
    @Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
        name = (String) in.readObject();  // Deserialize 'name'
        age = in.readInt();               // Deserialize 'age'
    }

    // Getters and Setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

public class ExternalizableExample {
    public static void main(String[] args) {
        // Create an object of Person
        Person person = new Person("John", 30);
        
        try {
            // Serialize the object
            FileOutputStream fileOut = new FileOutputStream("person.ser");
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            person.writeExternal(out);
            out.close();
            fileOut.close();

            // Deserialize the object
            FileInputStream fileIn = new FileInputStream("person.ser");
            ObjectInputStream in = new ObjectInputStream(fileIn);
            Person deserializedPerson = new Person();
            deserializedPerson.readExternal(in);
            in.close();
            fileIn.close();

            // Print the deserialized data
            System.out.println("Deserialized Person: ");
            System.out.println("Name: " + deserializedPerson.getName());
            System.out.println("Age: " + deserializedPerson.getAge());

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • Person ক্লাসটি Externalizable ইন্টারফেস ইমপ্লিমেন্ট করে এবং writeExternal() এবং readExternal() মেথডের মাধ্যমে সেরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন কাস্টমাইজ করা হয়েছে।
  • writeExternal() মেথডে আমরা কেবল name এবং age প্রোপার্টি সেরিয়ালাইজ করছি।
  • readExternal() মেথডে আমরা সেগুলিকে পুনরায় ডেসিরিয়ালাইজ করছি।
  • Person অবজেক্টটি সেরিয়ালাইজ করা হচ্ছে এবং তারপর ডেসিরিয়ালাইজ করার পর name এবং age প্রোপার্টি প্রিন্ট করা হচ্ছে।

আউটপুট:

Deserialized Person:
Name: John
Age: 30

Externalizable Interface এর সুবিধা এবং সীমাবদ্ধতা:

সুবিধা:

  1. কাস্টম সেরিয়ালাইজেশন:
    • আপনি কাস্টমাইজ করতে পারেন যে কোন ডেটা সেরিয়ালাইজ বা ডেসিরিয়ালাইজ করা হবে। আপনি চাইলে কিছু প্রোপার্টি বাদ দিতে পারেন, যা Serializable ইন্টারফেসে করা সম্ভব নয়।
  2. পারফরম্যান্স নিয়ন্ত্রণ:
    • আপনি যেভাবে ডেটা সেরিয়ালাইজ করবেন বা ডেসিরিয়ালাইজ করবেন তা নিয়ন্ত্রণ করতে পারেন, যা Serializable এর তুলনায় আরও ভালো পারফরম্যান্স প্রদান করতে পারে।
  3. কমপ্লেক্স অবজেক্টসের জন্য উপযুক্ত:
    • যদি আপনার অবজেক্টের মধ্যে কিছু কমপ্লেক্স ফিল্ড বা বড় ফিল্ড থাকে, যেগুলি সেরিয়ালাইজেশন থেকে বাদ দিতে চান, তবে Externalizable ব্যবহারে আপনি সেগুলি বাদ দিতে পারবেন।

সীমাবদ্ধতা:

  1. বিকল্প ডিফল্ট সেরিয়ালাইজেশন নেই:
    • Externalizable ইন্টারফেসের মাধ্যমে কাস্টম সেরিয়ালাইজেশন করতে হয়। এর মানে হচ্ছে, আপনাকে ম্যানুয়ালি সেরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন কোড লিখতে হবে, যা Serializable ইন্টারফেসের তুলনায় বেশি কোডিং প্রয়োজন।
  2. কনস্ট্রাক্টর প্রয়োজন:
    • Externalizable ব্যবহার করার জন্য ক্লাসটির একটি no-argument constructor থাকা প্রয়োজন, যা কখনও কখনও ডেটা প্রক্রিয়া করতে অস্বাভাবিক হতে পারে।

  • Externalizable ইন্টারফেস Java I/O সিস্টেমে customized serialization এবং deserialization এর জন্য ব্যবহৃত হয়।
  • এটি Serializable এর তুলনায় আরও বেশি নিয়ন্ত্রণ প্রদান করে, বিশেষত যখন complex objects বা large datasets পরিচালনা করতে হয়।
  • Externalizable ইন্টারফেস ব্যবহার করে আপনি একটি অবজেক্টের ডেটা সেরিয়ালাইজ এবং ডেসিরিয়ালাইজ করার প্রক্রিয়াকে কাস্টমাইজ করতে পারেন, যা পারফরম্যান্স এবং মেমরি ব্যবস্থাপনায় উন্নতি ঘটাতে সহায়ক।

Externalizable ইন্টারফেসটি advanced object serialization এর জন্য উপযুক্ত যেখানে সেরিয়ালাইজেশন প্রক্রিয়া বিস্তারিতভাবে নিয়ন্ত্রণ করতে হয়।

Content added By
Promotion

Are you sure to start over?

Loading...