通过JAVA的Serialization机制进行对象的拷贝

        在JAVA中,对一个复杂的对象进行深拷贝是一件比较麻烦的事情,《JAVA核心编程》中介绍了一种独特的方法来进行对象的深拷贝, 该方法利用了Serialization机制,无需考虑对象的内部结构,无论多复杂的对象,写出来的代码都是一样的,大大的方便了程序员的工作,只不过效率稍微低下了一点,但不失为一种选择。
        原理很简单,要把A对象拷贝给B,那就先把A对象写入到某个存储介质中,在让B对象去该存储介质中把内容读出来。在这一过程中,JAVA的
Serialization机制会保证A和B的内容完全相同,即实现了从A到B的深拷贝。

以下代码摘自《JAVA核心编程》:
    public Object clone()
    
{
       
try
       
{
          
// 在内存中开辟一块缓冲区,用于将自身写入
          ByteArrayOutputStream bout = new ByteArrayOutputStream();
          ObjectOutputStream out 
= new ObjectOutputStream(bout);
          
//通过Serialization机制将自身写入该缓冲区
          out.writeObject(this);
          out.close();

          
// 找到刚才开辟的缓冲区准备读取
          ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
          ObjectInputStream in 
= new ObjectInputStream(bin);
          
//将刚才写入的内容读入一个新的对象
          Object ret = in.readObject();
          in.close();

          
//返回这个对象,拷贝完毕
          return ret;
       }

       
catch (Exception e)
       
{
          
return null;
       }

    }
        大家可以看到,上述代码没有涉及到被拷贝对象的任何内部细节,所以说它是一段通用的代码,适用于任何对象,只不过效率比较低下。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值