Efficiency এবং Memory Optimization

Gson Streaming API - জিসন (Gson) - Java Technologies

344

Gson লাইব্রেরি ব্যবহার করার সময় efficiency এবং memory optimization গুরুত্বপূর্ণ বিষয়, বিশেষত যখন বড় বা জটিল JSON ডেটা প্রসেস করা হয়। এখানে কিছু কৌশল এবং কনফিগারেশন দেওয়া হলো, যা আপনার Gson ব্যবহারের পারফরম্যান্স এবং মেমরি ব্যবহারের দক্ষতা বাড়াতে সহায়তা করবে।

1. Gson এর Efficient Serialization/Deserialization

Gson এর serialization (Java Object থেকে JSON) এবং deserialization (JSON থেকে Java Object) প্রক্রিয়াগুলি কার্যকরভাবে পরিচালনা করা হলে মেমরি এবং প্রসেসিং সময় কমাতে সাহায্য করে। কিছু পদ্ধতি রয়েছে যা উন্নত কার্যকারিতা ও কম মেমরি খরচের জন্য সাহায্য করে:

এ. JsonReader এবং JsonWriter ব্যবহার করুন:

Streaming API (JsonReader এবং JsonWriter) ব্যবহার করলে আপনি বড় JSON ডেটা এক্সেস করতে পারেন, যেটি পুরো ডেটাকে একসাথে মেমরিতে লোড না করে একটি স্ট্রিম হিসেবে প্রক্রিয়া করবে। এটি বড় JSON ফাইল বা নেটওয়ার্ক থেকে ডেটা প্রসেস করার ক্ষেত্রে কার্যকর।

Example:

import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;

import java.io.StringReader;
import java.io.StringWriter;

public class Main {
    public static void main(String[] args) {
        String json = "{\"name\":\"John\", \"age\":30}";

        // JsonReader দিয়ে JSON ডেটা পড়া
        JsonReader reader = new JsonReader(new StringReader(json));
        try {
            reader.beginObject();
            while (reader.hasNext()) {
                String name = reader.nextName();
                if (name.equals("name")) {
                    System.out.println(reader.nextString());
                } else if (name.equals("age")) {
                    System.out.println(reader.nextInt());
                } else {
                    reader.skipValue();
                }
            }
            reader.endObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

এখানে JsonReader পুরো JSON ডেটা একবারে মেমরিতে লোড না করে স্ট্রিম আকারে একে একে JSON অবজেক্টে রূপান্তরিত করে, যা মেমরি ব্যবহারে অনেক দক্ষ।

B. Partial Parsing:

যখন বড় JSON ডেটার মধ্যে শুধু কিছু নির্দিষ্ট অংশ প্রয়োজন হয়, তখন পুরো ডেটা ডেসিরিয়ালাইজ করার বদলে সেই নির্দিষ্ট অংশগুলোকে সরাসরি নির্বাচন করে মেমরি অপ্টিমাইজ করা যায়।

2. Gson Configuration for Memory Efficiency

A. Avoid serializeNulls() unless necessary:

Gson এর serializeNulls() মেথড যদি না ব্যবহার করেন, তবে null মানগুলো JSON থেকে বাদ দেওয়া হবে। এতে মেমরি ব্যবহারের দিক থেকে উন্নতি হয়, কারণ null মানগুলোর জন্য অতিরিক্ত মেমরি বরাদ্দ করা হয় না।

Example without serializeNulls():

Gson gson = new Gson(); // No null serialization
Person person = new Person("John", null); // null will be omitted
String json = gson.toJson(person);

B. Use GsonBuilder with excludeFieldsWithoutExposeAnnotation:

আপনি যদি শুধুমাত্র নির্দিষ্ট ফিল্ডগুলো JSON এ অন্তর্ভুক্ত করতে চান, তবে @Expose অ্যানোটেশন ব্যবহার করতে পারেন এবং excludeFieldsWithoutExposeAnnotation() কনফিগারেশন করতে পারেন। এতে অপ্রয়োজনীয় ফিল্ডগুলো JSON ডেটায় অন্তর্ভুক্ত হবে না, যা মেমরি ব্যবহারে সাশ্রয়ী।

Example:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

class Person {
    @Expose
    String name;
    int age;

    // Constructor, Getter, Setter
}

Gson gson = new GsonBuilder()
                .excludeFieldsWithoutExposeAnnotation() // Exclude fields without @Expose annotation
                .create();

Person person = new Person("John", 30);
String json = gson.toJson(person); // Only 'name' will be included

এখানে age ফিল্ডটি @Expose অ্যানোটেশন না থাকার কারণে JSON-এ অন্তর্ভুক্ত হবে না, যা মেমরি অপ্টিমাইজ করবে।

C. Reusing Gson Instances:

যেহেতু Gson-এ অবজেক্ট তৈরি করার জন্য বেশ কিছু রিসোর্স খরচ হয়, তাই একবার Gson অবজেক্ট তৈরি করার পর বারবার সেটা ব্যবহার করা উচিত। প্রতিটি Serialization বা Deserialization এর জন্য নতুন Gson অবজেক্ট তৈরি না করে একটি একক Gson ইনস্ট্যান্স ব্যবহার করুন।

Example:

Gson gson = new Gson(); // Reuse the same Gson instance

// Serialization and Deserialization
String json = gson.toJson(person);
Person personDeserialized = gson.fromJson(json, Person.class);

এটি মেমরি এবং প্রসেসিং সময় কমানোর জন্য সাহায্য করে।

3. Gson Optimization with Custom TypeAdapter

যখন আপনি custom serialization/deserialization করতে চান, তখন আপনি TypeAdapter ব্যবহার করতে পারেন। এটি Gson-এর ডিফল্ট serialization/deserialization মেকানিজমের পরিবর্তে কাস্টম লজিক প্রয়োগ করার সুযোগ দেয়। কাস্টম TypeAdapter ব্যবহার করলে আপনি অপ্রয়োজনীয় তথ্য বাদ দিতে বা ভিন্নভাবে ডেটা প্রসেস করতে পারেন, ফলে মেমরি ব্যবহারে সাশ্রয় হয়।

Example for LocalDate:

import com.google.gson.*;

import java.lang.reflect.Type;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

class LocalDateAdapter implements JsonSerializer<LocalDate>, JsonDeserializer<LocalDate> {
    private final DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE;

    @Override
    public JsonElement serialize(LocalDate src, Type typeOfSrc, JsonSerializationContext context) {
        return new JsonPrimitive(src.format(formatter)); // LocalDate কে String-এ রূপান্তর
    }

    @Override
    public LocalDate deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        return LocalDate.parse(json.getAsString(), formatter); // String থেকে LocalDate-এ রূপান্তর
    }
}

এই কাস্টম Adapter তৈরি করে আপনি LocalDate টাইপের ডেটা JSON এর সাথে সম্পূর্ণ কার্যকরভাবে এবং মেমরি অপ্টিমাইজ করে হ্যান্ডল করতে পারবেন।

4. Efficient Memory Usage with Streaming vs. In-Memory Parsing

যদি আপনার JSON ডেটা খুব বড় হয় এবং আপনি চাইছেন মেমরি ব্যবহার কমাতে, তাহলে Streaming API ব্যবহার করুন। যেমন JsonReader এবং JsonWriter স্ট্রিমিং অপারেশনগুলোর জন্য খুবই উপযোগী।

  • In-Memory Parsing: পুরো JSON ডেটা মেমরিতে একযোগে লোড করা।
  • Streaming Parsing: JSON ডেটাকে একে একে, স্ট্রিম আকারে পড়া, যা মেমরি অপ্টিমাইজড।

Example of Streaming:

import com.google.gson.stream.JsonReader;
import java.io.StringReader;

String json = "{\"name\":\"John\", \"age\":30}";
JsonReader reader = new JsonReader(new StringReader(json));
reader.beginObject();
while (reader.hasNext()) {
    String name = reader.nextName();
    if (name.equals("name")) {
        System.out.println(reader.nextString());
    } else {
        reader.skipValue();
    }
}
reader.endObject();

এখানে JsonReader দিয়ে স্ট্রিমিং পার্সিং করা হচ্ছে, যা মেমরি ব্যবহার কমাবে।


সংক্ষেপে: Gson-এর Efficiency এবং Memory Optimization:

  1. Streaming API (JsonReader, JsonWriter) ব্যবহার করুন বড় JSON ডেটার ক্ষেত্রে।
  2. serializeNulls() ব্যবহার না করে null মানগুলো বাদ দিন।
  3. GsonBuilder দিয়ে কাস্টম কনফিগারেশন করুন, যেমন excludeFieldsWithoutExposeAnnotation()
  4. Reuse Gson instances: একবার Gson ইনস্ট্যান্স তৈরি করে বারবার ব্যবহার করুন।
  5. Custom TypeAdapter ব্যবহার করে ডেটা কাস্টমাইজ এবং অপটিমাইজ করুন।

এই পদ্ধতিগুলো ব্যবহার করে আপনি Gson এর পারফরম্যান্স এবং মেমরি ব্যবহারে উন্নতি করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...