Serializable(序列化) 实现java深度拷贝

/**
 * 通过序列化方式来处理java深度拷贝的问题,在内存中通过字节流的拷贝来实现,也就是把母
 * 对象写到一个字节流中,再从字节流中将其取出来,这样就可以重建一个新对象,该对象与母
 * 对象之间不存在引用共享的问题,也就相当于深拷贝了一个新对象,代码如下,当然还有其它方法,
 * 在此就先提到序列化实现深度拷贝的问题,
 * @author mary
 *
 */


//通过序列化实现深度拷贝

class CloneUtils{
     @SuppressWarnings("unchecked")
    public static <T extends Serializable> T clone(T obj){
         T cloneObj=null;
         try{
             //读取对象字节数据
             ByteArrayOutputStream baos=new ByteArrayOutputStream();
             ObjectOutputStream oos=new ObjectOutputStream(baos);
             oos.writeObject(obj);
             oos.close();
             //分配内存空间,写入原始对象,生成新对象
             ByteArrayInputStream bais=new ByteArrayInputStream(baos.toByteArray());
             ObjectInputStream ois=new ObjectInputStream(bais);
             //返回新的对象,并做类型转换
             cloneObj=(T)ois.readObject();
             ois.close();
         }catch(Exception e){
             e.printStackTrace();
         }
         return cloneObj;
     }

}


public class TheJava {
      public static void main(String s[]){
          String b="book";
          String a=null;
          a=CloneUtils.clone(b);
          b="java";
          System.out.println("a="+a);
          System.out.println("b="+b);
      }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值