java对象流方式深拷贝
时间: 2023-10-24 21:32:14 浏览: 103
在Java中,可以使用对象流方式实现深拷贝。对象流方式包括ObjectInputStream和ObjectOutputStream两个类。
要实现深拷贝,需要满足两个条件:
1. 对象必须实现Serializable接口。
2. 对象的所有引用类型成员变量也必须实现Serializable接口。
下面是一个示例代码,演示如何使用对象流方式实现深拷贝:
```java
import java.io.*;
class MyClass implements Serializable {
private String name;
private int age;
public MyClass(String name, int age) {
this.name = name;
this.age = age;
}
// Getters and setters
public String toString() {
return "Name: " + name + ", Age: " + age;
}
}
public class DeepCopyExample {
public static void main(String[] args) throws IOException, ClassNotFoundException {
MyClass obj1 = new MyClass("John", 25);
// 使用对象流方式进行深拷贝
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bos);
out.writeObject(obj1);
out.flush();
out.close();
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream in = new ObjectInputStream(bis);
MyClass obj2 = (MyClass) in.readObject();
in.close();
// 修改obj1的值,不会影响obj2
obj1.setName("Mike");
obj1.setAge(30);
System.out.println("obj1: " + obj1);
System.out.println("obj2: " + obj2);
}
}
```
在上面的示例中,首先创建了一个MyClass对象obj1,然后使用对象流方式进行深拷贝,将obj1写入字节数组输出流,并通过字节数组输入流读取到obj2中。
最后,修改了obj1的值,但是不会影响到obj2的值。这证明了对象流方式实现的是深拷贝。
需要注意的是,对象流方式实现深拷贝的前提是被拷贝的对象及其所有引用类型成员变量都必须实现Serializable接口。
阅读全文