Java Object থেকে JSON (Serialization)

জ্যাকসন (Jackson) - Java Technologies

395

Jackson একটি জনপ্রিয় JSON প্রসেসিং লাইব্রেরি যা Java objects থেকে JSON ফরম্যাটে রূপান্তর (serialization) এবং JSON থেকে Java objects এ রূপান্তর (deserialization) করার জন্য ব্যবহৃত হয়। Jackson এর ObjectMapper ক্লাস ব্যবহার করে খুব সহজেই Java Object to JSON (Serialization) করা সম্ভব।

এখানে Jackson ব্যবহার করে Java Object থেকে JSON তৈরি (serialization) করার সম্পূর্ণ পদ্ধতি এবং কিছু কাস্টমাইজেশন টিপস আলোচনা করা হয়েছে।


1. Jackson ব্যবহার করে Java Object থেকে JSON (Serialization)

a) Basic Example of Serialization

ধরা যাক, আপনার একটি Person ক্লাস আছে এবং আপনি এটি JSON ফরম্যাটে রূপান্তর করতে চান।

Person Class:

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

    // Constructors, getters, and setters
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

b) Serialization Example: Java Object to JSON

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonExample {
    public static void main(String[] args) {
        Person person = new Person("John", 30);

        // Create an ObjectMapper instance
        ObjectMapper objectMapper = new ObjectMapper();
        
        try {
            // Serialize Java Object to JSON string
            String jsonString = objectMapper.writeValueAsString(person);
            System.out.println(jsonString);
            // Output: {"name":"John","age":30}
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Explanation:

  • objectMapper.writeValueAsString(person) — এটি Person অবজেক্টটিকে JSON স্ট্রিং-এ রূপান্তরিত করবে।
  • Output: {"name":"John","age":30} — এটি JSON স্ট্রিং হিসেবে প্রদর্শিত হবে।

2. Advanced Serialization with Jackson

Jackson এর ObjectMapper ক্লাসের মাধ্যমে আপনি কাস্টম ফরম্যাটেও JSON তৈরি করতে পারেন, যেমন date formatting, null handling, এবং field inclusion কাস্টমাইজ করা।

a) Custom Date Format:

যদি আপনি Java Date বা LocalDate এর custom date format চান, তবে Jackson আপনাকে এটি কাস্টমাইজ করার সুযোগ দেয়।

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.util.StdDateFormat;

import java.text.SimpleDateFormat;
import java.util.Date;

public class JacksonExample {
    public static void main(String[] args) {
        Person person = new Person("John", 30);

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));

        try {
            String jsonString = objectMapper.writeValueAsString(person);
            System.out.println(jsonString);
            // Output: {"name":"John","age":30}
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

b) Ignore Null Fields:

Jackson ডিফল্টভাবে null fields JSON ফরম্যাটে যুক্ত করে। আপনি চাইলে null values বাদ দিতে পারেন।

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonInclude;

public class JacksonExample {
    public static void main(String[] args) {
        Person person = new Person("John", 30);
        person.setName(null); // name will be null, and it won't be included in the output

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);  // Exclude null fields

        try {
            String jsonString = objectMapper.writeValueAsString(person);
            System.out.println(jsonString);
            // Output: {"age":30}
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

c) Customize Field Names Using Annotations:

Jackson আপনাকে JSON ফিল্ডের নাম কাস্টমাইজ করার জন্য annotations ব্যবহার করার সুবিধা দেয়। এর মাধ্যমে আপনি Java ক্লাসের প্রপার্টির নাম থেকে JSON এ প্রদর্শিত নাম পরিবর্তন করতে পারেন।

import com.fasterxml.jackson.annotation.JsonProperty;

public class Person {
    @JsonProperty("full_name")
    private String name;
    
    private int age;

    // Getters, Setters, Constructors
}

এই ক্ষেত্রে, name প্রপার্টি full_name হিসেবে JSON-এ দেখা যাবে।

d) Pretty Printing JSON:

Jackson এ pretty print JSON করতে পারেন যাতে JSON আউটপুট আরও পড়তে সহজ হয়। এর জন্য ObjectMapper-এ enable করার প্রয়োজন।

objectMapper.enable(SerializationFeature.INDENT_OUTPUT);

এটি JSON আউটপুটকে সুন্দরভাবে ফরম্যাট করবে। যেমন:

{
  "name": "John",
  "age": 30
}

3. Handling Collections (Lists, Maps) with Jackson

Jackson দিয়ে আপনি collections (যেমন Lists, Maps) এবং nested objects সহজে JSON এ রূপান্তর করতে পারেন।

a) Serialize a List of Objects:

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;
import java.util.List;

public class JacksonExample {
    public static void main(String[] args) {
        List<Person> people = Arrays.asList(
            new Person("John", 30),
            new Person("Jane", 25)
        );

        ObjectMapper objectMapper = new ObjectMapper();

        try {
            String jsonString = objectMapper.writeValueAsString(people);
            System.out.println(jsonString);
            // Output: [{"name":"John","age":30},{"name":"Jane","age":25}]
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

b) Serialize a Map:

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;

public class JacksonExample {
    public static void main(String[] args) {
        Map<String, String> personMap = new HashMap<>();
        personMap.put("name", "John");
        personMap.put("age", "30");

        ObjectMapper objectMapper = new ObjectMapper();

        try {
            String jsonString = objectMapper.writeValueAsString(personMap);
            System.out.println(jsonString);
            // Output: {"name":"John","age":"30"}
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4. Write JSON to File Using Jackson

Jackson ব্যবহার করে JSON ডেটা ফাইলেও লিখতে পারেন। আপনি writeValue মেথড ব্যবহার করে JSON ফাইল তৈরি করতে পারেন।

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;

public class JacksonExample {
    public static void main(String[] args) {
        Person person = new Person("John", 30);

        ObjectMapper objectMapper = new ObjectMapper();

        try {
            // Write Java Object to JSON file
            objectMapper.writeValue(new File("person.json"), person);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

এটি একটি person.json ফাইল তৈরি করবে, যেখানে JSON ফরম্যাটে Person অবজেক্টের ডেটা থাকবে।

Jackson ব্যবহার করে আপনি সহজেই Java Object থেকে JSON তৈরি করতে পারেন। ObjectMapper এর সাহায্যে serialization প্রক্রিয়া সহজ এবং দ্রুত হয়। Customizations (যেমন date formats, null values exclusion, pretty printing) এবং advanced use cases (যেমন collections, nested objects) Jackson দিয়ে সহজেই ম্যানেজ করা যায়।

Jackson হল একটি খুবই শক্তিশালী এবং সাধারণত ব্যবহৃত লাইব্রেরি যা Java-এ JSON ডেটার সাথে কাজ করার ক্ষেত্রে সর্বোচ্চ পারফরম্যান্স এবং নমনীয়তা প্রদান করে।

Content added By

Java-তে Simple Object কে JSON-এ কনভার্ট করার জন্য Jackson একটি শক্তিশালী এবং জনপ্রিয় লাইব্রেরি। নীচে Jackson ব্যবহার করে Simple Object থেকে JSON-এ কনভার্ট করার একটি উদাহরণ দেওয়া হলো:

পদক্ষেপ:

  1. Maven Dependency: যদি আপনার প্রজেক্ট Maven ব্যবহার করে, তাহলে pom.xml-এ Jackson লাইব্রেরি যুক্ত করুন:

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.15.2</version> <!-- আপনি আপনার প্রয়োজন অনুযায়ী ভার্সন ব্যবহার করবেন -->
    </dependency>
    
  2. Simple Object তৈরি করুন: একটি ক্লাস তৈরি করুন এবং প্রয়োজনীয় ফিল্ড এবং গেটার-সেটার যুক্ত করুন। যেমন:

    public class Student {
        private int id;
        private String name;
        private String grade;
    
        // Constructors
        public Student() {}
    
        public Student(int id, String name, String grade) {
            this.id = id;
            this.name = name;
            this.grade = grade;
        }
    
        // Getters and Setters
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getGrade() {
            return grade;
        }
    
        public void setGrade(String grade) {
            this.grade = grade;
        }
    }
    
  3. ObjectMapper ব্যবহার করে JSON-এ কনভার্ট করুন:

    import com.fasterxml.jackson.databind.ObjectMapper;
    
    public class Main {
        public static void main(String[] args) {
            try {
                // Simple Object তৈরি
                Student student = new Student(1, "Rahim", "A");
    
                // ObjectMapper তৈরি
                ObjectMapper objectMapper = new ObjectMapper();
    
                // Object থেকে JSON-এ কনভার্ট
                String jsonString = objectMapper.writeValueAsString(student);
    
                // JSON প্রিন্ট করুন
                System.out.println("JSON String: " + jsonString);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
  4. আউটপুট:

    JSON String: {"id":1,"name":"Rahim","grade":"A"}
    

অতিরিক্ত টিপস:

  • Pretty Printing: যদি JSON ফরম্যাটটি সুন্দরভাবে দেখতে চান, writeValueAsString এর পরিবর্তে writerWithDefaultPrettyPrinter().writeValueAsString ব্যবহার করুন:

    String jsonString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(student);
    
  • Complex Object: Nested objects বা Collections (যেমন: List বা Map) সাপোর্ট করতে Jackson খুবই উপযোগী।
  • JSON থেকে Object (Deserialization): JSON-কে আবার Object-এ রূপান্তর করতে readValue() ব্যবহার করুন:

    Student deserializedStudent = objectMapper.readValue(jsonString, Student.class);
    

এটি Jackson ব্যবহার করে Simple Object কে JSON-এ কনভার্ট করার একটি মৌলিক ধারণা।

Content added By

Nested Objects এবং Complex Data Structures থেকে JSON তৈরি করার জন্য Java-তে আপনি Jackson লাইব্রেরি ব্যবহার করতে পারেন। Jackson একটি শক্তিশালী এবং সহজেই ব্যবহারযোগ্য JSON প্রক্রিয়াকরণ লাইব্রেরি যা আপনাকে Java অবজেক্ট থেকে JSON তৈরি করতে এবং JSON থেকে Java অবজেক্টে রূপান্তর করতে দেয়।

নীচে একটি উদাহরণ দেওয়া হলো যেখানে Nested Objects এবং Complex Data Structures থেকে JSON তৈরি করা হয়েছে:


Maven Dependency

প্রথমে, আপনার প্রোজেক্টে Jackson লাইব্রেরি যোগ করতে হবে। যদি আপনি Maven ব্যবহার করেন, তবে আপনার pom.xml ফাইলে নিচের dependency যোগ করুন:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

কোড উদাহরণ

import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.*;

class Address {
    private String street;
    private String city;
    private String zipCode;

    // Constructors
    public Address(String street, String city, String zipCode) {
        this.street = street;
        this.city = city;
        this.zipCode = zipCode;
    }

    // Getters and Setters
    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getZipCode() {
        return zipCode;
    }

    public void setZipCode(String zipCode) {
        this.zipCode = zipCode;
    }
}

class Person {
    private String name;
    private int age;
    private Address address;
    private List<String> hobbies;

    // Constructors
    public Person(String name, int age, Address address, List<String> hobbies) {
        this.name = name;
        this.age = age;
        this.address = address;
        this.hobbies = hobbies;
    }

    // Getters and Setters
    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public List<String> getHobbies() {
        return hobbies;
    }

    public void setHobbies(List<String> hobbies) {
        this.hobbies = hobbies;
    }
}

public class JacksonExample {
    public static void main(String[] args) throws Exception {
        // Nested Object
        Address address = new Address("123 Main St", "Dhaka", "1216");

        // Complex Data Structure
        List<String> hobbies = Arrays.asList("Reading", "Cycling", "Gaming");

        // Parent Object
        Person person = new Person("John Doe", 25, address, hobbies);

        // Jackson ObjectMapper
        ObjectMapper objectMapper = new ObjectMapper();

        // Java Object to JSON
        String json = objectMapper.writeValueAsString(person);

        // Print JSON
        System.out.println("JSON Output:");
        System.out.println(json);
    }
}

JSON Output

উপরের কোডটি চলানোর পর, নিম্নলিখিত JSON তৈরি হবে:

{
  "name": "John Doe",
  "age": 25,
  "address": {
    "street": "123 Main St",
    "city": "Dhaka",
    "zipCode": "1216"
  },
  "hobbies": ["Reading", "Cycling", "Gaming"]
}

মূল বিষয়

  1. Nested Objects: Address ক্লাসটি Person ক্লাসের অংশ।
  2. Complex Data Structure: List<String> টাইপের hobbies ব্যবহার করা হয়েছে।
  3. Jackson ObjectMapper: ObjectMapper ক্লাস ব্যবহার করে JSON তৈরি করা হয়েছে।

এটি Nested এবং Complex Data Structure থেকে JSON তৈরির সহজ এবং কার্যকর উদাহরণ।

Content added By

Java-তে কাস্টম সিরিয়ালাইজেশন হলো এমন একটি প্রক্রিয়া, যেখানে ডিফল্ট সিরিয়ালাইজেশন প্রক্রিয়া এড়িয়ে আপনি নিজস্ব নিয়মে একটি অবজেক্টের ডেটা সংরক্ষণ (serialize) এবং পুনরুদ্ধার (deserialize) করতে পারেন। এটি ব্যবহার করে আপনি সংবেদনশীল ডেটা এনক্রিপ্ট করতে, transient ফিল্ড হ্যান্ডল করতে, বা ডেটা প্রক্রিয়াকরণে নির্দিষ্ট নিয়ম যোগ করতে পারেন।


কাস্টম সিরিয়ালাইজেশনের ধাপসমূহ

১. Serializable ইন্টারফেস ইমপ্লিমেন্ট করা

  • যে ক্লাসটিকে সিরিয়ালাইজ করতে চান, সেটি java.io.Serializable ইন্টারফেস ইমপ্লিমেন্ট করতে হবে।
  • দুটি কাস্টম মেথড ব্যবহার করতে হয়:
    • writeObject
    • readObject

২. 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();
        }
    }
}

উদাহরণের মূল পয়েন্ট

  1. transient ফিল্ড: password ফিল্ডটি transient হিসাবে চিহ্নিত, তাই এটি ডিফল্টভাবে সংরক্ষণ হবে না।
  2. কাস্টম লজিক: writeObject মেথডে পাসওয়ার্ড এনক্রিপ্ট করে রাখা হয়েছে এবং readObject মেথডে এটি ডিক্রিপ্ট করা হয়েছে।
  3. ডিফল্ট সিরিয়ালাইজেশন: defaultWriteObject এবং defaultReadObject মেথড ব্যবহার করে নন-ট্রানজিয়েন্ট ফিল্ডগুলো সংরক্ষণ ও পুনরুদ্ধার করা হয়েছে।

কাস্টম সিরিয়ালাইজেশনের ব্যবহার

  1. সংবেদনশীল ডেটা এনক্রিপ্ট করা: পাসওয়ার্ড বা ব্যক্তিগত তথ্য রক্ষা করা।
  2. ডেটা যাচাই করা: ডেসিরিয়ালাইজেশনের সময় ডেটার সঠিকতা নিশ্চিত করা।
  3. transient ফিল্ড হ্যান্ডল করা: transient ফিল্ডের ডেটা সংরক্ষণ ও পুনরুদ্ধার করা।
  4. কাস্টম ফরম্যাট ব্যবহার করা: ডেটাকে একটি নির্দিষ্ট কাঠামোতে রূপান্তর করা।

কাস্টম সিরিয়ালাইজেশন ডেটা নিরাপত্তা, নমনীয়তা এবং নির্দিষ্ট প্রয়োজনীয়তাগুলো পূরণের ক্ষেত্রে অত্যন্ত কার্যকর।

Content added By

Java Collections এবং Generic টাইপের Serialization জাভা প্রোগ্রামিংয়ে গুরুত্বপূর্ণ একটি বিষয়, বিশেষ করে যখন আপনাকে জাভা অবজেক্টগুলোকে সংরক্ষণ বা ট্রান্সমিট করতে হয়। নিচে বিষয়টির বিস্তারিত আলোচনা দেওয়া হলো:


1. Java Collections Serialization

Java Collections Framework-এ বিভিন্ন ডেটা স্ট্রাকচার যেমন List, Set, Map ইত্যাদি আছে। এগুলো serialization-এর মাধ্যমে ফাইল সিস্টেমে সংরক্ষণ বা নেটওয়ার্কের মাধ্যমে ট্রান্সমিট করা সম্ভব।

উদাহরণ: Collection Serialization

import java.io.*;
import java.util.*;

public class CollectionSerializationExample {
    public static void main(String[] args) {
        // Collection তৈরি
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        // Serialize করা
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("collection.ser"))) {
            oos.writeObject(list);
            System.out.println("Collection serialized successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // Deserialize করা
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("collection.ser"))) {
            List<String> deserializedList = (List<String>) ois.readObject();
            System.out.println("Deserialized Collection: " + deserializedList);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

2. Generic টাইপের Serialization

Generic টাইপ ব্যবহার করলে একটি নির্দিষ্ট টাইপের অবজেক্টগুলো নিয়ে কাজ করা সহজ হয়। Generic ক্লাস বা কন্টেইনারগুলোও serialization সাপোর্ট করে।

উদাহরণ: Generic টাইপ Serialization

import java.io.*;
import java.util.*;

class GenericBox<T> implements Serializable {
    private T item;

    public GenericBox(T item) {
        this.item = item;
    }

    public T getItem() {
        return item;
    }

    public void setItem(T item) {
        this.item = item;
    }

    @Override
    public String toString() {
        return "GenericBox{" + "item=" + item + '}';
    }
}

public class GenericSerializationExample {
    public static void main(String[] args) {
        GenericBox<String> box = new GenericBox<>("Hello, Serialization!");

        // Serialize করা
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("genericBox.ser"))) {
            oos.writeObject(box);
            System.out.println("GenericBox serialized successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // Deserialize করা
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("genericBox.ser"))) {
            GenericBox<String> deserializedBox = (GenericBox<String>) ois.readObject();
            System.out.println("Deserialized GenericBox: " + deserializedBox);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

3. Serialization-এর গুরুত্বপূর্ণ পয়েন্ট

  • Serializable ইন্টারফেস: কনক্রিট ক্লাসগুলো serialize করতে হলে java.io.Serializable ইন্টারফেস ইমপ্লিমেন্ট করতে হবে।
  • transient কীওয়ার্ড: কিছু ফিল্ড serialize করতে না চাইলে তাদের transient ডিক্লেয়ার করুন।
  • সতর্কতা: Generic টাইপের সাথে প্রাইমিটিভ ডেটা টাইপ (int, double) সরাসরি কাজ করে না। Wrapper টাইপ ব্যবহার করতে হবে (যেমন, Integer, Double)।

4. Best Practices

  • serialVersionUID ফিল্ড ডিফাইন করা, যাতে ক্লাস ভার্সন চেঞ্জের পরেও serialization কাজ করে।
  • প্রয়োজন ছাড়া বড় Collection বা Object Graph serialize না করা, এতে পারফরম্যান্স সমস্যা হতে পারে।

এগুলো বাস্তব প্রজেক্টে ব্যবহারের ক্ষেত্রে খুবই গুরুত্বপূর্ণ।

Content added By
Promotion

Are you sure to start over?

Loading...