Java-তে কাস্টম সিরিয়ালাইজেশন হলো এমন একটি প্রক্রিয়া, যেখানে ডিফল্ট সিরিয়ালাইজেশন প্রক্রিয়া এড়িয়ে আপনি নিজস্ব নিয়মে একটি অবজেক্টের ডেটা সংরক্ষণ (serialize) এবং পুনরুদ্ধার (deserialize) করতে পারেন। এটি ব্যবহার করে আপনি সংবেদনশীল ডেটা এনক্রিপ্ট করতে, transient ফিল্ড হ্যান্ডল করতে, বা ডেটা প্রক্রিয়াকরণে নির্দিষ্ট নিয়ম যোগ করতে পারেন।
কাস্টম সিরিয়ালাইজেশনের ধাপসমূহ
১. Serializable ইন্টারফেস ইমপ্লিমেন্ট করা
- যে ক্লাসটিকে সিরিয়ালাইজ করতে চান, সেটি
java.io.Serializableইন্টারফেস ইমপ্লিমেন্ট করতে হবে। - দুটি কাস্টম মেথড ব্যবহার করতে হয়:
writeObjectreadObject
২. writeObject মেথড
- সিরিয়ালাইজেশনের সময় ডেটা কীভাবে সংরক্ষণ করা হবে তা নির্ধারণ করে।
এটি ডিক্লেয়ার করতে হয়:
private void writeObject(ObjectOutputStream oos) throws IOException
৩. readObject মেথড
- ডেসিরিয়ালাইজেশনের সময় ডেটা কীভাবে পুনরুদ্ধার হবে তা নির্ধারণ করে।
এটি ডিক্লেয়ার করতে হয়:
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException
উদাহরণ: কাস্টম সিরিয়ালাইজেশন
import java.io.*;
class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private transient String password; // সরাসরি সিরিয়ালাইজ হবে না
public Person(String name, String password) {
this.name = name;
this.password = password;
}
// কাস্টম সিরিয়ালাইজেশন
private void writeObject(ObjectOutputStream oos) throws IOException {
oos.defaultWriteObject(); // নন-ট্রানজিয়েন্ট ফিল্ড সংরক্ষণ
// পাসওয়ার্ড এনক্রিপ্ট করে সংরক্ষণ করা
String encryptedPassword = "ENCRYPTED_" + password;
oos.writeObject(encryptedPassword);
}
// কাস্টম ডেসিরিয়ালাইজেশন
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
ois.defaultReadObject(); // নন-ট্রানজিয়েন্ট ফিল্ড পুনরুদ্ধার
// পাসওয়ার্ড ডিক্রিপ্ট করা
String encryptedPassword = (String) ois.readObject();
password = encryptedPassword.replace("ENCRYPTED_", "");
}
@Override
public String toString() {
return "Person{name='" + name + "', password='" + password + "'}";
}
}
public class CustomSerializationExample {
public static void main(String[] args) {
Person person = new Person("Jackson", "secretPassword");
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"));
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
// অবজেক্টটি সিরিয়ালাইজ করা
oos.writeObject(person);
// অবজেক্টটি ডেসিরিয়ালাইজ করা
Person deserializedPerson = (Person) ois.readObject();
System.out.println("Deserialized Person: " + deserializedPerson);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
উদাহরণের মূল পয়েন্ট
transientফিল্ড:passwordফিল্ডটিtransientহিসাবে চিহ্নিত, তাই এটি ডিফল্টভাবে সংরক্ষণ হবে না।- কাস্টম লজিক:
writeObjectমেথডে পাসওয়ার্ড এনক্রিপ্ট করে রাখা হয়েছে এবংreadObjectমেথডে এটি ডিক্রিপ্ট করা হয়েছে। - ডিফল্ট সিরিয়ালাইজেশন:
defaultWriteObjectএবংdefaultReadObjectমেথড ব্যবহার করে নন-ট্রানজিয়েন্ট ফিল্ডগুলো সংরক্ষণ ও পুনরুদ্ধার করা হয়েছে।
কাস্টম সিরিয়ালাইজেশনের ব্যবহার
- সংবেদনশীল ডেটা এনক্রিপ্ট করা: পাসওয়ার্ড বা ব্যক্তিগত তথ্য রক্ষা করা।
- ডেটা যাচাই করা: ডেসিরিয়ালাইজেশনের সময় ডেটার সঠিকতা নিশ্চিত করা।
transientফিল্ড হ্যান্ডল করা:transientফিল্ডের ডেটা সংরক্ষণ ও পুনরুদ্ধার করা।- কাস্টম ফরম্যাট ব্যবহার করা: ডেটাকে একটি নির্দিষ্ট কাঠামোতে রূপান্তর করা।
কাস্টম সিরিয়ালাইজেশন ডেটা নিরাপত্তা, নমনীয়তা এবং নির্দিষ্ট প্রয়োজনীয়তাগুলো পূরণের ক্ষেত্রে অত্যন্ত কার্যকর।
Content added By
Read more