Sobes.tech
Junior

Wat is serialisatie en parsing van objecten in Android?

sobes.tech AI

Antwoord van AI

Serialisatie is het proces waarbij een object wordt omgezet in een stroom van bytes voor opslag (bijvoorbeeld in een bestand of database) of overdracht (bijvoorbeeld via het netwerk). Parsing (of deserialisatie) is het tegenovergestelde proces: het herstellen van een object uit een byte-stroom. In Android worden hiervoor meestal Serializable of Parcelable gebruikt.

Serializable (standaard Java-interface): gemakkelijk te gebruiken (alleen de interface implementeren), maar langzamer dan Parcelable en creëert veel tijdelijke objecten.

// Voorbeeld Serializable
import java.io.Serializable;

public class MySerializableObject implements Serializable {
    private static final long serialVersionUID = 1L; // Aanbevolen om te specificeren
    private String name;
    private int age;

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

    // Getters en setters
}

Parcelable (Android-specifieke interface): sneller en efficiënter dan Serializable, omdat het geoptimaliseerd is voor IPC (Inter-Process Communication). Vereist meer code.

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

    // Constructor voor deserialisatie
    protected MyParcelableObject(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    // Creator voor het maken van instanties uit 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; // Altijd 0 voor de meeste objecten
    }

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

    // Getters en setters
}

Vergelijking:

Functie Serializable Parcelable
Interface java.io.Serializable android.os.Parcelable
Prestaties Langzamer Sneller
Gebruiksgemak Gemakkelijk (minder code) Moeilijker (meer code)
Gebruik Algemeen Java Android (IPC, Bundles, Intents)
Objectcreatie Meer tijdelijke objecten Minder tijdelijke objecten

Parcelable is de voorkeur voor het overdragen van gegevens tussen Android-componenten (bijvoorbeeld via Intent of Bundle).