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