Serializable Interface ব্যবহার করে Tuple Serialization

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

360

Serialization হলো একটি প্রক্রিয়া, যা একটি অবজেক্টকে byte stream-এ রূপান্তর করে, যাতে এটি ফাইল বা নেটওয়ার্কের মাধ্যমে সংরক্ষণ বা প্রেরণ করা যায়। Deserialization প্রক্রিয়ার মাধ্যমে এটি পুনরায় অবজেক্টে রূপান্তর করা হয়।

Tuples কে Serializable করতে হলে, জাভাতে Serializable ইন্টারফেস ব্যবহার করতে হবে। এর মাধ্যমে Tuples ডেটা ফাইল বা নেটওয়ার্কে সংরক্ষণ এবং পাঠানো সম্ভব।


Javatuples এবং Serializable

Javatuples লাইব্রেরির টাপল ক্লাস (যেমন, Pair, Triplet, Quartet, ইত্যাদি) ইতিমধ্যেই Serializable ইন্টারফেস ইমপ্লিমেন্ট করে। এটি ব্যবহার করে সহজেই Tuples কে Serialize এবং Deserialize করা যায়।


কোড উদাহরণ: Tuple Serialization এবং Deserialization

Step 1: Serializable Tuples তৈরি

import org.javatuples.Pair;

import java.io.*;

public class TupleSerializationExample {
    public static void main(String[] args) {
        // Tuple তৈরি
        Pair<String, Integer> tuple = new Pair<>("Alice", 25);

        // Serialization
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("tuple.ser"))) {
            oos.writeObject(tuple);
            System.out.println("Tuple serialized: " + tuple);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // Deserialization
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("tuple.ser"))) {
            @SuppressWarnings("unchecked")
            Pair<String, Integer> deserializedTuple = (Pair<String, Integer>) ois.readObject();
            System.out.println("Tuple deserialized: " + deserializedTuple);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

আউটপুট:

Tuple serialized: [Alice, 25]
Tuple deserialized: [Alice, 25]

Multiple Value Tuples Serialization

Quartet Serialization:

import org.javatuples.Quartet;

import java.io.*;

public class QuartetSerializationExample {
    public static void main(String[] args) {
        // Quartet তৈরি
        Quartet<String, Integer, Double, Boolean> tuple = new Quartet<>("John", 30, 95.5, true);

        // Serialization
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("quartet.ser"))) {
            oos.writeObject(tuple);
            System.out.println("Quartet serialized: " + tuple);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // Deserialization
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("quartet.ser"))) {
            @SuppressWarnings("unchecked")
            Quartet<String, Integer, Double, Boolean> deserializedTuple = 
                    (Quartet<String, Integer, Double, Boolean>) ois.readObject();
            System.out.println("Quartet deserialized: " + deserializedTuple);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

আউটপুট:

Quartet serialized: [John, 30, 95.5, true]
Quartet deserialized: [John, 30, 95.5, true]

কাস্টম Serializable Tuple ক্লাস

যদি কাস্টম Tuple ক্লাস ব্যবহার করতে হয়, তাহলে সেই ক্লাসে Serializable ইন্টারফেস ইমপ্লিমেন্ট করতে হবে।

উদাহরণ:

import java.io.*;

class CustomTuple<A, B> implements Serializable {
    private static final long serialVersionUID = 1L;

    private final A first;
    private final B second;

    public CustomTuple(A first, B second) {
        this.first = first;
        this.second = second;
    }

    public A getFirst() {
        return first;
    }

    public B getSecond() {
        return second;
    }

    @Override
    public String toString() {
        return "[" + first + ", " + second + "]";
    }
}

public class CustomTupleSerialization {
    public static void main(String[] args) {
        // Custom Tuple তৈরি
        CustomTuple<String, Integer> tuple = new CustomTuple<>("Alice", 25);

        // Serialization
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("customTuple.ser"))) {
            oos.writeObject(tuple);
            System.out.println("Custom Tuple serialized: " + tuple);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // Deserialization
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("customTuple.ser"))) {
            @SuppressWarnings("unchecked")
            CustomTuple<String, Integer> deserializedTuple = (CustomTuple<String, Integer>) ois.readObject();
            System.out.println("Custom Tuple deserialized: " + deserializedTuple);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

আউটপুট:

Custom Tuple serialized: [Alice, 25]
Custom Tuple deserialized: [Alice, 25]

Serialization এর Best Practices

  1. serialVersionUID ব্যবহার করুন:

    • প্রতিটি Serializable ক্লাসে serialVersionUID যোগ করুন।
    • এটি ক্লাস সংস্করণ নিয়ন্ত্রণে সাহায্য করে।
    private static final long serialVersionUID = 1L;
    
  2. Transient ফিল্ড ব্যবহার করুন:

    • অপ্রয়োজনীয় ফিল্ডগুলো Serialization থেকে বাদ দিতে transient ব্যবহার করুন।
    private transient String password;
    
  3. Proper Exception Handling:
    • Serialization এবং Deserialization এর সময় উপযুক্ত IOException এবং ClassNotFoundException হ্যান্ডল করুন।
  4. Use Javatuples:
    • Tuples এর জন্য Javatuples লাইব্রেরি ব্যবহার করলে সরাসরি Serializable সুবিধা পাওয়া যায়।

Serialization এর ব্যবহারিক ক্ষেত্র

  1. ডেটা স্টোরেজ: Tuples কে ফাইল সিস্টেমে সংরক্ষণ করা।
  2. নেটওয়ার্কিং: Tuples ব্যবহার করে ডেটা প্রেরণ এবং গ্রহণ।
  3. ক্যাশিং: Tuples কে Serialize করে ক্যাশে সংরক্ষণ।
  4. ডেটা ব্যাকআপ: ডেটা সংরক্ষণ এবং পরে পুনরুদ্ধারের জন্য।

  • Serializable Interface ব্যবহার করে Tuples কে সহজেই Serialize এবং Deserialize করা যায়।
  • Javatuples সরাসরি Serializable সমর্থন করে, যা ডেটা সংরক্ষণ এবং প্রেরণ করার প্রক্রিয়া সহজ করে।
  • কাস্টম ক্লাস তৈরি করে Tuples কে নিজের প্রয়োজন অনুযায়ী Serialize করা সম্ভব। Serialization প্রক্রিয়ার সময় Best Practices অনুসরণ করলে এটি আরও কার্যকর এবং নিরাপদ হয়।
Content added By
Promotion

Are you sure to start over?

Loading...