Sobes.tech
Junior

Сериализатсия ва парсинг объектҳо дар Android чӣ аст?

sobes.tech AI

Ҷавоб аз AI

سریالیزیشن فرآیند تبدیل یک شیء به جریان بایت‌ها برای ذخیره‌سازی (مثلاً در فایل یا پایگاه داده) یا انتقال (مثلاً از طریق شبکه) است. پارسینگ (یا deserialization) فرآیند معکوس است: بازیابی شیء از جریان بایت‌ها. در Android، اغلب برای این اهداف از Serializable یا Parcelable استفاده می‌شود.

Serializable (رابط استاندارد جاوا): آسان برای استفاده (فقط نیاز به پیاده‌سازی رابط است)، اما کندتر از Parcelable است و اشیاء موقت زیادی ایجاد می‌کند.

// نمونه‌ای از Serializable
import java.io.Serializable;

public class MySerializableObject implements Serializable {
    private static final long serialVersionUID = 1L; // توصیه می‌شود مشخص شود
    private String name;
    private int age;

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

    // getter و setter
}

Parcelable (رابط خاص Android): سریع‌تر و کارآمدتر از Serializable است، زیرا برای IPC (ارتباط بین فرآیندها) بهینه‌سازی شده است. نیاز به کد بیشتری برای پیاده‌سازی دارد.

// نمونه‌ای از Parcelable
import android.os.Parcel;
import android.os.Parcelable;

public class MyParcelableObject implements Parcelable {
    private String name;
    private int age;

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

    // سازنده برای deserialization
    protected MyParcelableObject(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    // سازنده برای ایجاد نمونه‌ها از Parcel
    public static final Creator<MyParcelableObject> CREATOR = new Creator<MyParcelableObject>() {
        @Override
        public MyParcelableObject createFromParcel(Parcel in) {
            return new MyParcelableObject(in);
        }

        @Override
        public MyParcelableObject[] newArray(int size) {
            return new MyParcelableObject[size];
        }
    };

    @Override
    public int describeContents() {
        return 0; // همیشه 0
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
    }

    // getter و setter
}

مقایسه:

ویژگی Serializable Parcelable
رابط java.io.Serializable android.os.Parcelable
عملکرد کندتر سریع‌تر
سهولت استفاده آسان‌تر (کد کمتر) سخت‌تر (کد بیشتر)
کاربرد جاوا عمومی اندروید (IPC، Bundles، Intents)
ساخت اشیاء اشیاء موقت بیشتر اشیاء موقت کمتر

Parcelable برای انتقال داده‌ها بین اجزای برنامه‌های اندروید (مثلاً از طریق Intent یا Bundle) ترجیح داده می‌شود.