객체 클론 - 시리얼화 및 역시리얼화를 통한 딥 클로닝
4277 단어 즉석에서 필기하다.
package clone;import java.io.Serializable;
/**
* Serializable
* @author Jack
*
*/
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = -5007319993510922716L;
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package clone;
import java.io.Serializable;
import java.util.List;
/**
* Serializable
* @author Jack
*
*/
public class MySystem implements Serializable{
/**
*
*/
private static final long serialVersionUID = 5750212768684906174L;
private int id;
private String name;
private User user;
private List users;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List getUsers() {
return users;
}
public void setUsers(List users) {
this.users = users;
}
}
package clone;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
/**
* Serializable
* @author Jack
*
*/
public class BeanUtils {
public static T cloneTo(T t){
T dist = null;
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
ObjectOutputStream objOutStream = null;
ObjectInputStream objInStream = null;
try {
objOutStream = new ObjectOutputStream(byteStream);
objOutStream.writeObject(t);
objOutStream.flush();
objInStream = new ObjectInputStream(new ByteArrayInputStream(byteStream.toByteArray()));
dist = (T) objInStream.readObject();
} catch (Exception e) {
throw new RuntimeException(e);
}finally {
if (objOutStream != null){
try {
objOutStream.close();
objOutStream = null;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
if (objInStream != null){
try {
objInStream.close();
objInStream = null;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
return dist;
}
public static void main(String[] args) {
/**
*
*/
User user = new User();
user.setId(2);
user.setAge(22);
user.setName("jack");
User user1 = cloneTo(user);
user1.setAge(33);
System.out.println(user.getAge()); //22
System.out.println(user1.getAge()); //33
/**
* (Mysystem User )
*/
MySystem system = new MySystem();
system.setId(1);
system.setName(" ");
system.setUser(user);
MySystem system1 = cloneTo(system);
system1.setName(" ");
System.out.println(system.getName()); //
System.out.println(system1.getName()); //
/**
*
*/
User userMain = new User();
user.setId(2);
user.setAge(22);
user.setName("jackMain");
User userBranch = new User();
userBranch.setId(2);
userBranch.setAge(22);
userBranch.setName("jackBranch");
MySystem systemMain = new MySystem();
systemMain.setName(" Main");
List users = new ArrayList<>();
users.add(userMain);
systemMain.setUsers(users);
MySystem systemBranch = cloneTo(systemMain);
systemBranch.setName(" Branch");
systemBranch.getUsers().add(userBranch);
System.out.println(systemMain.getName()+":"+systemMain.getUsers().size()); //1
System.out.println(systemBranch.getName()+":"+systemBranch.getUsers().size());//2
}
}
이 코드를 직접 실행할 수 있습니다