জাভা ডিজাইন প্যাটার্নঃ সিরিয়ালাইজেশন পদ্ধতি

টিউন বিভাগ জাভা
প্রকাশিত

জাভা সিরিয়ালাইজেশন (serialization) এপিআই আমাদেরকে অবজেক্ট সিকুয়েইন্স অফ বাইট এ কনভার্ট করতে সাহায্য করে যেন আমরা এটিকে নেটওয়ার্ক এর মাধ্যমে পাঠাতে পারি, ডেটাবেজ এ সেভ করতে পারি এবং পরবর্তীতে ব্যবহার করতে পারি। আর সিকুয়েইন্স অফ বাইট এ কনভার্ট করাই হলো ডিসিরিয়ালাইজেশন ।

সিরিয়ালাইজেশন পদ্ধতিতে একটি ক্লাস কে অবশ্যই সিরিয়ালাইজেশন ইমপ্লিমেন্ট করতে হবে। সিরিয়ালাইজেশন ইন্টারফেসটি java.io প্যাকেজ এর অন্তর্গত। সিরিয়ালাইজেশন একটি মার্কার ইন্টারফেস। সিরিয়ালাইজেশন এপিআই তে, সিরিয়ালাইজেশন এবং ডিসিরিয়ালাইজেশন করার জন্য যেগুলো ব্যবহার করা হয়ঃ
*java.io.serializable
*java.io.Externalizable
*ObjectInputStream
*and ObjectOutputStream etc....

package com.amardroid.serialization;
import java.io.Serializable;
public class Employee implements Serializable {
private String name;
private int id;
transient private int salary;
@Override
public String toString(){
return "Employee{name="+name+",id="+id+",salary="+salary+"}";
}

//getter and setter methods
public String getName() {
return name;
}

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

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public int getSalary() {
return salary;
}

public void setSalary(int salary) {
this.salary = salary;
}
}

উপরের কোড টা সিম্পল একটা জাভা কোড । আপনি যদি কোন অবজেক্ট কে সিরিয়ালাই্জড
এর মাধ্যমে স্টীর্ম এ কনভার্ট না করতে চান তবে সেক্ষেত্রে আপনাকে transient কীওয়ার্ড টি
ব্যাবহার করতে হবে ।

মনে করি, আমরা কোন বিষয় সম্পর্কে কোন ফাইল এ লিখব এবং সেটাকে একই ফাইল এর ভেতরে ডিসিরিয়ালাইজেশন করব ।
এক্ষেত্রে আমরা ObjectInputStream() এবং ObjectOutputStream() এই দুইটি ব্যাবহার করতে পারি ।

package com.amardroid.serialization;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class SerializationUtil {

// deserialize to Object from given file
public static Object deserialize(String fileName) throws IOException,
ClassNotFoundException {
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(fis);
Object obj = ois.readObject();
ois.close();
return obj;
}

// serialize the given object and save it to file
public static void serialize(Object obj, String fileName)
throws IOException {
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(obj);

fos.close();
}

}

নিচের কোড টি লিখে জাভা সিরিয়ালাইজেশন বিষয়ে টি টেস্ট করা হল।

package com.amardroid.serialization;
import java.io.IOException;

public class SerializationTest {
public static void main(String[] args) {
String fileName="employee.ser";
Employee emp = new Employee();
emp.setId(100);
emp.setName("Pankaj");
emp.setSalary(5000);

//serialize to file
try {
SerializationUtil.serialize(emp, fileName);
} catch (IOException e) {
e.printStackTrace();
return;
}

Employee empNew = null;
try {
empNew = (Employee) SerializationUtil.deserialize(fileName);
} catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
}

System.out.println("emp Object::"+emp);
System.out.println("empNew Object::"+empNew);
}

}

আউটপুটঃ

emp Object::Employee{name=Pankaj,id=100,salary=5000}
empNew Object::Employee{name=Pankaj,id=100,salary=0}

এইখানে salary transient ভেরিয়াবল টি সেভ হয় নাই । একই ভাবে স্ট্যাটিক ভেরিয়েবল টি কেও
সিরিয়ালাই্জড করা সম্ভব না ।

মার্কার ইন্টারফেস :

মার্কার ইন্টারফেস এ কোন ফিল্ড অথবা মেথড থাকে না । এটা
ব্যাবহার করা হয়, jvm এ কোন কিছু বহন করার জন্য, যা ক্লাস টি মেথড এবং ফিল্ড গুলো সহ ইমপ্লিমেন্ট করে।

অত:পর বলা যায়, একটি এম্পটি ইন্টারফেস ই একটি মার্কার ইন্টারফেস । কিছু জাভা বিশেষজ্ঞরা
এটিকে ট্যাগ ইন্টারফেস ও বলে । নিচে কিছু মেজর মার্কার ইন্টারফেস এর নাম দেয়া হল ।

*Searilizable interface
*Cloneable interface
*Remote interface
*ThreadSafe interface

মার্কার ইন্টারফেস টি ডিজাইন এ আলোচনা করা হয় । মার্কার ইন্টারফেস একটি
পদ্ধতি, যা দ্বারা কিছু ডেটা এসোসিয়েট করা যায় যেখানে ল্যাংগুয়েজ সাপোর্ট করে না । একটি নরমাল
ইন্টারফেস কে অবশ্যই মেথড গুলোকে ইমপ্লিমেন্ট করতে হয় । কিছু হাইব্রিড ইন্টারফে
রয়েছে যাতে কিছু মেথড থাকে । কিন্তু এই ধরনের ডিজাইন কিছু কনফিউশন তৈরি করে, যদি তা ভালভাবে হ্যান্ডেল না করা হয় ।

পূর্বে প্রকাশিতঃ আমার ড্রয়েড

Level 0

আমি মেহেদী হাসান। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 13 বছর 6 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 23 টি টিউন ও 117 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 0 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।

http://www.dhrubohost.com, ডোমেইন রেজিস্ট্রেশন, বাজেট ওয়েব হোস্টিং, বিজনেস ওয়েব হোস্টিং, রিসেলার হোস্টিং, ভিপিএস এবং SSL সার্টফিকেট প্রোভাইডার। ফেসবুকে পাবেনঃ https://fb.com/DhruboHost, হটলাইন : +88 01795 470074


টিউনস


আরও টিউনস


টিউনারের আরও টিউনস


টিউমেন্টস