কম্পিউটার টিউটোরিয়াল

জাভা সিরিয়ালাইজেশনে transient কীভাবে final এর সাথে কাজ করে?

জাভা সিরিয়ালাইজেশন হলো একটি অবজেক্টের স্টেটকে বাইট স্ট্রিমে রূপান্তর করার প্রক্রিয়া যাতে তা নেটওয়ার্কের মাধ্যমে পাঠানো যায় (RMI, JPA ইত্যাদি ব্যবহার করে)।

Transient ভেরিয়েবল

transient কীওয়ার্ড দিয়ে ঘোষিত ভেরিয়েবলগুলো সিরিয়ালাইজেশন প্রক্রিয়া থেকে বাদ দেওয়া হয়। ডি-সিরিয়ালাইজেশনের পর এই ভেরিয়েবলগুলোর মান ডিফল্ট ভ্যালু হয়ে যায় (null, false, 0 ইত্যাদি)।

public transient int limit = 55; // সিরিয়ালাইজ হবে না
public int b; // সিরিয়ালাইজ হবে

উদাহরণ: transient সহ final ভেরিয়েবল

নিচের প্রোগ্রামে Student ক্লাসে name (সিরিয়ালাইজেবল) এবং age (transient) দুটি ফিল্ড আছে।

import java.io.*;

class Student implements Serializable {
    private String name;
    private transient int age; // এটি সিরিয়ালাইজ হবে না

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void display() {
        System.out.println("Name: " + this.name);
        System.out.println("Age: " + this.age);
    }
}

public class SerializeExample {
    public static void main(String args[]) throws Exception {
        Student std = new Student("Sarmista", 27);

        // সিরিয়ালাইজেশন
        FileOutputStream fos = new FileOutputStream("e:\\student.ser");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(std);
        oos.close();
        fos.close();

        System.out.println("Values before de-serialization:");
        std.display();
        System.out.println("Object serialized.......");

        // ডি-সিরিয়ালাইজেশন
        FileInputStream fis = new FileInputStream("e:\\student.ser");
        ObjectInputStream ois = new ObjectInputStream(fis);
        Student deSerializedStd = (Student) ois.readObject();
        System.out.println("Object de-serialized.......");
        ois.close();
        fis.close();

        System.out.println("Values after de-serialization");
        deSerializedStd.display();
    }
}

আউটপুট

Values before de-serialization:
Name: Sarmista
Age: 27
Object serialized.......
Object de-serialized.......
Values after de-serialization
Name: Sarmista
Age: 0

ব্যাখ্যা: age ফিল্ডটি transient ঘোষিত रहने के কারনে সেটি সিরিয়ালাইজ হয়নি। ডি-সিরিয়ালাইজেশনের সময় এটি ডিফল্ট ভ্যালু 0 পেয়েছে। final কীওয়ার্ড যদি transient এর সাথে থাকে (যেমন private final transient int age = 27;), তবে কম্পাইল টাইম কনস্ট্যান্ট হওয়ার কারণে সেটি সিরিয়ালাইজ হতে পারে (যদি মান কম্পাইল টাইমে জানা থাকে)। কিন্তু সাধারণত transient final ইনস্ট্যান্স ভেরিয়েবল ডি-সিরিয়ালাইজেশনের সময় ডিফল্ট ভ্যালু ফেরত দেয়।

  1. জাভাতে String কে InputStream অবজেক্টে রূপান্তর করা

  2. জাভাতে StringBuilder এবং StringBuffer তুলনা

  3. জাভাতে মিউটেবল অবজেক্ট রেফারেন্স সহ ইমিউটেবল ক্লাস কীভাবে তৈরি করবেন?

  4. জাভা POJO কে JSON-এ কনভার্ট করা: Jackson এবং Gson ব্যবহার করে