Sobes.tech
Junior

Android'de nesne serileştirme ve ayrıştırma nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Serileştirme, bir nesneyi depolama (örneğin, dosya veya veritabanında) veya iletme (örneğin, ağ üzerinden) amacıyla bayt akışına dönüştürme işlemidir. Ayrıştırma (veya deserializasyon) ise ters işlemdir: bayt akışından bir nesneyi geri yükleme. Android'de bu amaçlar için genellikle Serializable veya Parcelable kullanılır.

Serializable (Java'nın standart arayüzü): Kullanımı kolaydır (sadece arayüzü uygulamanız gerekir), ancak Parcelable'den daha yavaş ve çok sayıda geçici nesne oluşturur.

// Serializable örneği
import java.io.Serializable;

public class MySerializableObject implements Serializable {
    private static final long serialVersionUID = 1L; // Tavsiye edilir
    private String name;
    private int age;

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

    // Getter ve setterlar
}

Parcelable (Android'e özgü arayüz): Serializable'den daha hızlı ve etkilidir, çünkü IPC (İşlemlerarası iletişim) için optimize edilmiştir. Daha fazla kod gerektirir.

// Parcelable örneği
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;
    }

    // Deserializasyon için yapıcı
    protected MyParcelableObject(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    // Parcel'ten nesne oluşturmak için Creator
    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; // Çoğu nesne için her zaman 0
    }

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

    // Getter ve setterlar
}

Karşılaştırma:

Özellik Serializable Parcelable
Arayüzü java.io.Serializable android.os.Parcelable
Performans Daha yavaş Daha hızlı
Kullanım Kolaylığı Daha kolay (daha az kod) Daha zor (daha fazla kod)
Kullanım Alanı Genel Java Android (IPC, Bundles, Intents)
Nesne Oluşumu Daha fazla geçici nesne Daha az geçici nesne

Parcelable, Android uygulamasındaki bileşenler arasında veri iletimi için tercih edilir (örneğin, Intent veya Bundle aracılığıyla).