java序列化实现深拷贝
时间: 2023-08-15 18:11:48 浏览: 99
详解java中的深拷贝和浅拷贝(clone()方法的重写、使用序列化实现真正的深拷贝)
在Java中,可以使用序列化来实现深拷贝。深拷贝是指创建一个全新的对象,将原始对象的所有属性值复制到新对象中。以下是一个简单的示例代码,演示如何通过序列化实现深拷贝:
```java
import java.io.*;
class MyClass implements Serializable {
private int value;
public MyClass(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
public class DeepCopyExample {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// 创建原始对象
MyClass originalObj = new MyClass(10);
// 将原始对象序列化到字节数组输出流中
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(originalObj);
oos.close();
// 从字节数组输入流中反序列化出新的对象
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
MyClass clonedObj = (MyClass) ois.readObject();
ois.close();
// 修改原始对象的值
originalObj.setValue(20);
// 输出结果
System.out.println("Original value: " + originalObj.getValue());
System.out.println("Cloned value: " + clonedObj.getValue());
}
}
```
在上面的示例中,我们定义了一个名为`MyClass`的类,它实现了`Serializable`接口。然后,我们创建了一个原始对象`originalObj`,并将其序列化到字节数组输出流中。接着,我们通过反序列化从字节数组输入流中创建了一个新的对象`clonedObj`。最后,我们修改了原始对象的值,并输出了原始对象和克隆对象的值。
通过这种方式,我们实现了深拷贝,因为`clonedObj`是一个全新的对象,它的属性值与原始对象`originalObj`的属性值相同,但是它们之间没有引用关系。这意味着对其中一个对象的修改不会影响另一个对象。
阅读全文