Sobes.tech
Junior

Какво е сериализация и парсинг на обекти в Android?

sobes.tech AI

Отговор от AI

Сериализацията е процесът на преобразуване на обект в поток от байтове за съхранение (например във файл или база данни) или пренос (например по мрежа). Парсингът (или десериализацията) е обратният процес: възстановяване на обекта от поток байтове. В Android за тези цели най-често се използват Serializable или Parcelable.

Serializable (стандартен Java интерфейс): Лесен за използване (трябва само да реализира интерфейса), но по-бавен от 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;
    }

    // Гетъри и сетъри
}

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;
    }

    // Конструктор за десериализация
    protected MyParcelableObject(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    // Creator за създаване на екземпляри от 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);
    }

    // Гетъри и сетъри
}

Сравнение:

Характеристика Serializable Parcelable
Интерфейс java.io.Serializable android.os.Parcelable
Производителност По-бавен По-бърз
Лесна употреба По-лесен (по-малко код) По-труден (повече код)
Използване Общ Java Android (IPC, Bundles, Intents)
Създаване на обекти Повече временни обекти По-малко временни обекти

Parcelable е предпочитаният начин за пренос на данни между компонентите на Android приложението (например чрез Intent или Bundle).