gpt4 book ai didi

android - 如何在 Parcel 的帮助下将 Parcelable 编码和解码为字节数组?

转载 作者:IT王子 更新时间:2023-10-28 23:58:19 32 4
gpt4 key购买 nike

我想编码和解码一个实现 Parcelable 到/来自字节数组的类。 我很清楚 Parcelable 表示不稳定,因此不适合长期存储实例。但是我有一个用例,我需要序列化一个对象,它不是一个展示停止器如果由于内部 Android 更改而导致解码失败。此外,该类已经实现了 Parcelable 接口(interface)。

给定一个类 MyClass implements Parcelable,我如何(ab)使用 Parcelable 接口(interface)进行编码/解码?

最佳答案

首先创建一个帮助类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);

关于android - 如何在 Parcel 的帮助下将 Parcelable 编码和解码为字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18000093/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com