উদাহরণ সহ Externalizable ব্যবহার

Serialization এবং Externalizable Interface - জাভা টাপল (Java Tuples) - Java Technologies

344

Externalizable হল Java I/O-এর একটি ইন্টারফেস যা Serialization এবং Deserialization প্রক্রিয়ার জন্য ব্যবহৃত হয়। যখন একটি ক্লাস Externalizable ইন্টারফেস ইমপ্লিমেন্ট করে, তখন এটি ডেটা সংরক্ষণ (serialization) এবং পুনরুদ্ধার (deserialization) কাস্টমাইজ করতে পারে। Externalizable ইন্টারফেসে দুটি মেথড থাকে: writeExternal() এবং readExternal()

Externalizable ইন্টারফেসটি Serializable ইন্টারফেসের একটি উন্নত সংস্করণ। যেখানে Serializable সাধারণত Java দ্বারা পরিচালিত হয়, Externalizable ক্লাসগুলোর ক্ষেত্রে আপনি নিজে কাস্টম কনট্রোল রাখতে পারেন, অর্থাৎ আপনি কীভাবে একটি অবজেক্ট সিরিয়ালাইজ হবে তা নির্ধারণ করতে পারেন।


Externalizable ইন্টারফেসের দুটি মেথড:

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

Externalizable এর উদাহরণ

এখানে একটি ক্লাস Person তৈরি করা হয়েছে, যা Externalizable ইন্টারফেস ইমপ্লিমেন্ট করে। এতে writeExternal() এবং readExternal() মেথড কাস্টমাইজ করা হয়েছে, যা অবজেক্টের ডেটা সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করবে।

import java.io.*;

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

    // Default constructor required for Externalizable interface
    public Person() {
        // Empty constructor is mandatory for Externalizable
    }

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

    // writeExternal method to customize serialization
    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
        // Writing custom object data to stream
        out.writeObject(name);
        out.writeInt(age);
    }

    // readExternal method to customize deserialization
    @Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
        // Reading custom object data from stream
        name = (String) in.readObject();
        age = in.readInt();
    }

    // toString method to print object state
    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }

    public static void main(String[] args) {
        Person person = new Person("John Doe", 30);
        System.out.println("Original Person: " + person);

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

        // Deserialize the object
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
            Person deserializedPerson = new Person();
            deserializedPerson.readExternal(ois); // Custom deserialization
            System.out.println("Deserialized Person: " + deserializedPerson);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  1. writeExternal():
    • writeObject() ব্যবহার করে অবজেক্টের name প্রপার্টি এবং writeInt() ব্যবহার করে age প্রপার্টি স্ট্রিমে লেখার জন্য কাস্টমাইজ করা হয়েছে।
  2. readExternal():
    • readObject() ব্যবহার করে অবজেক্টের name এবং readInt() ব্যবহার করে age প্রপার্টি পুনরুদ্ধার করা হয়েছে।
  3. Serialization:
    • অবজেক্ট person প্রথমে সিরিয়ালাইজ হচ্ছে person.ser ফাইলে।
  4. Deserialization:
    • পরবর্তীতে সেই ফাইল থেকে অবজেক্টটি পুনরুদ্ধার করা হচ্ছে এবং কনসোলে আউটপুট প্রদর্শন করা হচ্ছে।

আউটপুট:

Original Person: Person{name='John Doe', age=30}
Person serialized successfully.
Deserialized Person: Person{name='John Doe', age=30}

Externalizable এবং Serializable এর মধ্যে পার্থক্য:

বিষয়SerializableExternalizable
স্বয়ংক্রিয় সিরিয়ালাইজেশনJava নিজে সিরিয়ালাইজেশন প্রক্রিয়া পরিচালনা করে।সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন কাস্টমাইজ করা যায়।
বাধ্যতামূলক কনস্ট্রাক্টরনেইএকটি ডিফল্ট কনস্ট্রাক্টর থাকতে হবে।
ডেটা লেখার কাস্টমাইজেশনকাস্টমাইজেশন সম্ভব নয়সম্পূর্ণ কাস্টমাইজেশন সম্ভব।
ব্যবহারসাধারণ অবজেক্টের জন্য।বিশেষ ক্ষেত্রে যেখানে ডেটা লেখা এবং পড়া কাস্টমাইজ করা প্রয়োজন।

Externalizable ইন্টারফেস আপনাকে অবজেক্টের serialization এবং deserialization কাস্টমাইজ করতে দেয়, যা Serializable ইন্টারফেসের তুলনায় আরও নমনীয়। আপনি যখন চান যে আপনার অবজেক্টের ডেটা স্বাভাবিকভাবে না লিখে আপনার নিজের পছন্দমতো স্ট্রিমে লেখেন এবং পড়েন, তখন Externalizable ব্যবহৃত হয়। এটি Java Tuples ব্যবহার করে ডেটার প্রপার্টি সংরক্ষণ করার জন্যও উপকারী হতে পারে, যেখানে একাধিক অবজেক্টের state একটি Tuple হিসাবে রিট্রিভ করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...