バイト配列との間でParcelable
を実装するクラスをマーシャリングおよびアンマーシャリングします。 Parcelable表現が安定していないため、インスタンスの長期保存を意図していないという事実を十分に認識しています。しかし、オブジェクトをシリアル化する必要があるユースケースがありますが、それはショートップではありません内部Android=変更。また、クラスは既にParcelable
インターフェースを実装しています。
クラスMyClass implements Parcelable
、マーシャリング/アンマーシャリングにParcelable
インターフェイスを(ab)使用するにはどうすればよいですか?
最初にヘルパークラスを作成しますParcelableUtil.Java:
public class ParcelableUtil {
public static byte[] marshall(Parcelable parceable) {
Parcel parcel = Parcel.obtain();
parceable.writeToParcel(parcel, 0);
byte[] bytes = parcel.marshall();
parcel.recycle();
return bytes;
}
public static Parcel unmarshall(byte[] bytes) {
Parcel parcel = Parcel.obtain();
parcel.unmarshall(bytes, 0, bytes.length);
parcel.setDataPosition(0); // This is extremely important!
return parcel;
}
public static <T> T unmarshall(byte[] bytes, Parcelable.Creator<T> creator) {
Parcel parcel = unmarshall(bytes);
T result = creator.createFromParcel(parcel);
parcel.recycle();
return result;
}
}
上記のutilクラスの助けを借りて、クラスのインスタンスをマーシャル/アンマーシャルできますMyClass implements Parcelable
そのようです:
アンマーシャリング(CREATOR
を使用)
byte[] bytes = …
MyClass myclass = ParcelableUtil.unmarshall(bytes, MyClass.CREATOR);
アンマーシャリング(CREATOR
なし)
byte[] bytes = …
Parcel parcel = ParcelableUtil.unmarshall(bytes);
MyClass myclass = new MyClass(parcel); // Or MyClass.CREATOR.createFromParcel(parcel).
マーシャリング
MyClass myclass = …
byte[] bytes = ParcelableUtil.marshall(myclass);