使用jdk自带的字节流实现深克隆
时间: 2024-09-09 15:15:04 浏览: 92
在Java中,使用JDK自带的`ObjectInputStream`和`ObjectOutputStream`配合深拷贝(Cloneable接口和序列化机制)可以实现对象的深度克隆。这是因为`ObjectOutputStream`将对象序列化为字节流,而`ObjectInputStream`可以从字节流恢复到对象,这个过程可以创建一个新的对象实例,从而实现深度复制。
以下是简单的步骤:
1. 首先,确保目标类实现了`Cloneable`接口,并且重写了`clone()`方法,因为默认的`Cloneable`中的`clone()`方法会浅复制对象引用,而不是真正的复制。
```java
public class MyClass implements Cloneable {
//...
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
```
2. 然后,你可以使用`ObjectOutputStream`将对象序列化为字节流。
```java
MyClass original = new MyClass(); // 创建原对象
ObjectOutputStream oos = new ObjectOutputStream(new ByteArrayOutputStream());
oos.writeObject(original);
byte[] bytes = oos.toByteArray();
```
3. 接下来,使用`ObjectInputStream`从字节流反序列化,创建新的对象。
```java
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes));
MyClass cloned = (MyClass) ois.readObject();
```
现在`cloned`就是原始对象的一个独立副本,它们共享相同的字段值,但彼此之间互不影响。
阅读全文