객체 클론 - 시리얼화 및 역시리얼화를 통한 딥 클로닝

시리얼화 및 역시리얼화로 심도 있는 클론 복제를 구현하고 코드를 직접 업로드합니다.
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
	}
}

이 코드를 직접 실행할 수 있습니다

좋은 웹페이지 즐겨찾기