Android 对象深拷贝:使用 Serializable 和 Parcelable 接口
在 Android 中实现对象的深拷贝可以使用以下方法:
方法一:使用 'Serializable' 接口
- 首先,确保你的类实现了 'Serializable' 接口。例如,我们有一个叫做 'MyClass' 的类,可以这样定义:
public class MyClass implements Serializable {
// 类的成员变量和方法...
}
- 创建一个辅助方法,用于执行深拷贝。例如:
public MyClass deepClone(MyClass original) {
try {
// 创建一个字节流输出流
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// 创建一个对象输出流,并将其绑定到字节流输出流上
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
// 将原始对象写入到对象输出流中
objectOutputStream.writeObject(original);
// 关闭输出流
objectOutputStream.close();
// 创建一个字节流输入流,使用之前的字节流输出流的字节数组作为输入
ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
// 创建一个对象输入流,并将其绑定到字节流输入流上
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
// 从对象输入流中读取对象,这将是一个深拷贝的副本
MyClass clone = (MyClass) objectInputStream.readObject();
// 关闭输入流
objectInputStream.close();
// 返回深拷贝的副本
return clone;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
- 若要执行深拷贝操作,只需调用上述辅助方法即可:
MyClass original = new MyClass();
MyClass clone = deepClone(original);
方法二:使用 'Parcelable' 接口
- 确保你的类实现了 'Parcelable' 接口。例如:
public class MyClass implements Parcelable {
// 类的成员变量和方法...
}
-
添加 'Parcelable' 接口所需的方法和构造函数。可以通过 Android Studio 自动生成这些方法,点击类名 -> 右键 -> Generate -> Parcelable。
-
创建一个辅助方法,用于执行深拷贝。例如:
public MyClass deepClone(MyClass original) {
Parcel parcel = Parcel.obtain();
original.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
MyClass clone = MyClass.CREATOR.createFromParcel(parcel);
parcel.recycle();
return clone;
}
- 若要执行深拷贝操作,只需调用上述辅助方法即可:
MyClass original = new MyClass();
MyClass clone = deepClone(original);
这些是在 Android 中实现对象深拷贝的两种常见方法。你可以根据具体情况选择其中一种方法实现深拷贝。
原文地址: https://www.cveoy.top/t/topic/cK03 著作权归作者所有。请勿转载和采集!