Sobes.tech
Junior

Mis on objektide serialiseerimine ja parser Androidis?

sobes.tech AI

Vastus AI-lt

Serialiseerimine on protsess, kus objekt muudetakse baitvooguks, et seda saaks salvestada (näiteks faili või andmebaasi) või edastada (näiteks võrgus). Deserialiseerimine (või parsimine) on vastupidine protsess: objekti taastamine baitvoogust. Androidis kasutatakse selleks kõige sagedamini Serializable või Parcelable.

Serializable (Java standardliides): lihtne kasutada (piisab liidese rakendamisest), kuid aeglasem kui Parcelable ning loob palju ajutisi objekte.

// Serializable näide
import java.io.Serializable;

public class MySerializableObject implements Serializable {
    private static final long serialVersionUID = 1L; // Soovitatav määrata
    private String name;
    private int age;

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

    // Getterid ja setterid
}

Parcelable (Android-spetsiifiline liides): kiirem ja tõhusam kui Serializable, kuna on optimeeritud IPC jaoks. Nõuab rohkem koodi.

// Parcelable näide
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;
    }

    // Deserialiseerimise konstruktor
    protected MyParcelableObject(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    // CREATOR objekti loomine
    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; // tavaliselt 0
    }

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

    // Getterid ja setterid
}

Võrdlus:

Omadus Serializable Parcelable
Liides java.io.Serializable android.os.Parcelable
Sooritusvõime Aeglasem Kiirem
Kasutamise lihtsus Lihtsam (vähem koodi) Raskem (rohkem koodi)
Kasutus Üldine Java Android (IPC, Bundles, Intents)
Objekti loomine Rohkem ajutisi objekte Vähem ajutisi objekte

Parcelable on eelistatud andmete edastamiseks Androidi rakenduse komponentide vahel (näiteks Intent või Bundle).