如何克隆Parcel对象

时间:2012-11-29 15:26:43

标签: android clone parcelable cloneable parcel

我想克隆一个Parcel对象(不是parcelable)。

我不能使用clone()方法,因为它受到保护。我也不能使用反射调用它,因为Parcel类没有实现'clonable'

我尝试执行问题的解决方案: Create a copy of parcel object 但它不适用于Parcel类型本身 - 原因是没有为Parcel类型本身定义'writeToParcel'。因此,对于'Parcel a'对象,a.writeToParcel(parcel,0)将无法编译。

2 个答案:

答案 0 :(得分:3)

使用Parcel.appendFrom()

这比编组和解组更有效,并且不会丢失有关对象引用或包中FileDescriptor的任何数据。

来源:无意中听到Android框架开发人员谈论这个问题,并决定更新Stackoverflow问题。

答案 1 :(得分:-1)

您可以通过编组/解组

来完成
byte[] rawData = original.marshall();
Parcel clone = Parcel.obtain();
clone.unmarshall(rawData, 0, rawData.length);
clone.setDataPosition(original.dataPosition());

但它并不适用于所有包裹。我认为它在包含活动对象的Parcel上失败了,但我还没有测试确定。