Назад к вопросам
Junior
67
questionbank
Что такое сериализуемые и парселируемые объекты?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Сериализуемые объекты могут быть преобразованы в байтовый поток для хранения или передачи, используя стандартный механизм Java java.io.Serializable.
Парселируемые объекты также могут быть упакованы и распакованы, но используют специализированный механизм Android android.os.Parcelable. Этот механизм более эффективен для передачи данных между компонентами Android, так как оптимизирован для IPC (Inter-Process Communication).
| Характеристика | Serializable |
Parcelable |
|---|---|---|
| Механизм | Java reflection | Android Parceling API |
| Производительность | Менее эффективен (использует reflection) | Более эффективен |
| Реализация | Проще (маркерный интерфейс) | Требует реализации методов writeToParcel, createFromParcel, describeContents |
| Использование | Стандартное Java-приложение, удаленный вызов методов (RMI) | Специфично для Android, передача данных между активити, сервисами и т.д. |
| Бойлерплейт | Меньше кода | Больше кода |
Пример реализации 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; // Обычно 0, если нет специальных файловых дескрипторов
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(value);
}
// Getters (опущены для краткости)
}