咱们能够利用clone方法来实现对象只见的复制,但对于比较复杂的对象(好比对象中包含其余对象,其余对象又包含别的对象.....)这样咱们必须进行层层深度clone,每一个对象须要实现 cloneable接口,比较麻烦,那就继续学习下一个序列化方法。java
建立ide
/* * 文 件 名: A.java 版 权: Unis Cloud Information Technology Co., Ltd. Copyright * 2015, All rights reserved 描 述: <描述> 修 改 人: Administrator 修改时间: 2015-11-10 * 跟踪单号: <跟踪单号> 修改单号: <修改单号> 修改内容: <修改内容> */ package com.hubin.supers; import java.io.Serializable; /** * <一句话功能简述> <功能详细描述> * * @author Administrator * @version [版本号, 2015-11-10] * @see [相关类/方法] * @since [产品/模块版本] */ public class A implements Serializable { private String name; private int age; /** * @return 返回 name */ public String getName() { return name; } /** * @param 对name进行赋值 */ public void setName(String name) { this.name = name; } /** * @return 返回 age */ public int getAge() { return age; } /** * @param 对age进行赋值 */ public void setAge(int age) { this.age = age; } /** * @return */ @Override public String toString() { return "A [name=" + name + ", age=" + age + "]"; } }
建立B类:
学习
/* * 文 件 名: B.java 版 权: Unis Cloud Information Technology Co., Ltd. Copyright * 2015, All rights reserved 描 述: <描述> 修 改 人: Administrator 修改时间: 2015-11-10 * 跟踪单号: <跟踪单号> 修改单号: <修改单号> 修改内容: <修改内容> */ package com.hubin.supers; import java.io.Serializable; /** * <一句话功能简述> <功能详细描述> * * @author Administrator * @version [版本号, 2015-11-10] * @see [相关类/方法] * @since [产品/模块版本] */ public class B implements Serializable { private A a; private String name; /** * @return 返回 a */ public A getA() { return a; } /** * @param 对a进行赋值 */ public void setA(A a) { this.a = a; } /** * @return 返回 name */ public String getName() { return name; } /** * @param 对name进行赋值 */ public void setName(String name) { this.name = name; } /** * @return */ @Override public String toString() { return "B [a=" + a + ", name=" + name + "]"; } }
建立测试Desc类:测试
/* * 文 件 名: Desc.java 版 权: Unis Cloud Information Technology Co., Ltd. Copyright * 2015, All rights reserved 描 述: <描述> 修 改 人: Administrator 修改时间: 2015-11-10 * 跟踪单号: <跟踪单号> 修改单号: <修改单号> 修改内容: <修改内容> */ package com.hubin.supers; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List; /** * * @author Administrator * @version [版本号, 2015-11-10] * @see [相关类/方法] * @since [产品/模块版本] */ public class Desc { public static void main(String[] args) throws Exception { A a = new A(); a.setName("张三"); a.setAge(10); B b = new B(); b.setA(a); b.setName("南京"); List<B> list = new ArrayList<B>(); list.add(b); ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(byteOut); out.writeObject(list); ByteArrayInputStream byteIn = new ByteArrayInputStream( byteOut.toByteArray()); ObjectInputStream in = new ObjectInputStream(byteIn); List<B> list1 = (List<B>) in.readObject(); list1.get(0).getA().setName("李四"); System.out.println(list.get(0)); System.out.println(list1.get(0)); } }
结果:this
B [a=A [name=张三, age=10], name=南京]spa
B [a=A [name=李四, age=10], name=南京]code
从结果能够看到当修改序列化后的对象的值不会影响原先对象的值,因此能够经过序列化进行深度克隆orm