作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想编码和解码一个实现 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/
我是一名优秀的程序员,十分优秀!