Sobes.tech
Junior

Mis on serialiseeritavad ja pakendatavad objektid?

sobes.tech AI

Vastus AI-lt

Serialiseeritavad objektid võivad olla muudetud baitvooguks salvestamiseks või edastamiseks, kasutades Java standardmehhanismi java.io.Serializable.

Parcelitavad objektid võivad samuti olla pakitud ja lahtipakitud, kuid kasutavad spetsialiseeritud Android-mehhanismi android.os.Parcelable. See mehhanism on tõhusam andmete edastamiseks Androidi komponentide vahel, kuna see on optimeeritud IPC (vaheprotsessiline suhtlus) jaoks.

Omadus Serializable Parcelable
Mehhanism Java refleksioon Android Parceling API
Tõhusus Vähem tõhus (kasutab refleksiooni) Tõhusam
Rakendamine Lihtsam (märkme interfeiss) Nõuab writeToParcel, createFromParcel, describeContents meetodite rakendamist
Kasutus Tavaline Java rakendus, kaugmeetodite kutsed (RMI) Spetsiaalne Android, andmete edastamine tegevuste, teenuste vahel jne.
Büloorplaan Vähem koodi Rohkem koodi

Näide Parcelable rakendamisest:

// 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; // Tavaliselt 0, kui puuduvad erilised failikirjeldajad
    }

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

    // Getterid (lühenduse jaoks jäetud välja)
}