深度克隆问题

曾经面对想完全克隆出一个java对象出来。前面谈ArrayList的克隆问题,我记得当时我就傻傻的自己把被克隆对象的属性一一赋值到了一个新创建的对象中去。这真的是一件体力活啊。如果对象网络很复杂,所做的工作绝不会轻松哈。当时想到把对象图保存到文件中进行序列化。现在还找到一个不错的方法。直接使用管道流,将对象写入再读出,省却了序列化的步骤。找个时间来测验一下这两种方法,谁的效率更高。先把代码贴上:

 

import java.io.Serializable;

public class Person implements Serializable {
	private static final long serialVersionUID = -3432072860096318326L;
	private String name;
	private String password;

	public Person(String name, String password) {
		this.name = name;
		this.password = password;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}

 

 测试代码:

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;


public class TestClone {

	/**
	 * @param args
	 */
	 public static Object objectClone(Object originObj) {
		  PipedOutputStream op = new PipedOutputStream();
		  PipedInputStream ip = new PipedInputStream();
		  ObjectOutputStream oos = null;
		  ObjectInputStream ois = null;
		  try {
		   op.connect(ip);
		   oos = new ObjectOutputStream(op);
		   oos.writeObject(originObj);
		   ois = new ObjectInputStream(ip);
		   Object obj = ois.readObject();
		   return obj;
		  } catch (Exception e) {
			  System.out.println("exception");
			  return null;
		  } finally {
		   try {
		    op.close();
		    ip.close();
		    op = null;
		    ip = null;
		    if (oos != null) {
		     oos.close();
		     oos = null;
		    }
		    if (ois != null) {
		     ois.close();
		     ois = null;
		    }
		   } catch (IOException e) {
		   }
		  }
		 }
	public static void main(String[] args) {
		Person p1 = new Person("jianchen","123456");
		System.out.println(p1);
		Person p2 = (Person)objectClone(p1);
		System.out.println(p2);
		System.out.println(p2.getName()+"  "+p2.getPassword());

	}

}

 输出如下:

Person@61de33
Person@60aeb0
jianchen  123456

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值