代码改变世界

Java对象的深复制----利用串行化进行深复制

2015-08-11 01:51  你吃不吃麦芽糖  阅读(257)  评论(0)    收藏  举报

把对象写到流里的过程是串行化(Serilization)过程,但是在Java程序圈里又非常形象地称为“冷冻”或者“腌咸菜”过程;而把对象从流中读出来的并行化(Deserialization)过程则叫做“解冻”或者“回鲜”过程。应当指出的是,写到流里的是对象的一个拷贝,而原来对象仍然存在于JVM里面,因此“腌成咸菜”的只是对象的一个拷贝。

在Java语言里深复制一个对象,常常可以先使对象实现Serializable接口,然后把对象(实际上只是对象的一个拷贝)写到一个流里(腌成咸菜),再从流里读回来,便可以重建对象。

public class DeepCopyDemo implements Serializable{
	public Object deepClone() throws Exception
	{
		//将对象写到流里
		ByteArrayOutputStream bo=new ByteArrayOutputStream();
		ObjectOutputStream oo=new ObjectOutputStream(bo);
		oo.writeObject(this);
		//将对象读出来
		ByteArrayInputStream bi=new ByteArrayInputStream(bo.toByteArray());
		ObjectInputStream oi=new ObjectInputStream(bi);
		return (oi.readObject());
	}
}