Sobes.tech
Junior

Wat zijn serialiseerbare en parcelbare objecten?

sobes.tech AI

Antwoord van AI

Seriële objecten kunnen worden omgezet in een byte-stroom voor opslag of overdracht, met behulp van het standaardmechanisme van Java java.io.Serializable.

Parcelbare objecten kunnen ook worden ingepakt en uitgepakt, maar gebruiken een gespecialiseerd Android-mechanisme android.os.Parcelable. Dit mechanisme is efficiënter voor het overdragen van gegevens tussen Android-componenten, omdat het geoptimaliseerd is voor IPC (Inter-Process Communication).

Kenmerk Serializable Parcelable
Mechanisme Java-reflectie Android Parceling API
Prestaties Minder efficiënt (gebruikt reflectie) Efficiënter
Implementatie Eenvoudiger (markeerinterface) Vereist implementatie van methoden writeToParcel, createFromParcel, describeContents
Gebruik Standaard Java-toepassing, RMI-aanroepen Specifiek voor Android, gegevensoverdracht tussen activiteiten, services, etc.
Sjabloon Minder code Meer code

Voorbeeld van implementatie van Parcelable:

// MyParcelableObject.java
package com.example.myapplication;

import android.os.Parcel;
import android.os.Parcelable;

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

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

    protected MyParcelableObject(Parcel in) {
        name = in.readString();
        value = in.readInt();
    }

    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; // Meestal 0, tenzij er speciale bestand descriptors zijn
    }

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

    // Getters (weggelaten voor beknoptheid)
}