华丽的痘痘

努力成为一个有价值的程序员

王亚楠ID:andycpp
42204次访问,排名2417好友7人,关注者21
做一名合格地java教师
andycpp的文章
原创 40 篇
翻译 1 篇
转载 12 篇
评论 14 篇
最近评论
czdvcc:wow power leveling
hukaibao2007:不错
wjjdlove:貌似不错呢
wjjdlove:thanks
wjjdlove:不错,学习了
文章分类
收藏
相册
我的相册
高手专栏
Web高手buaawhl的专栏(RSS)
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 通过JAVA的Serialization机制进行对象的拷贝收藏

新一篇: 对Struts的资源文件进行汉化的便捷方法

        在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;
       }

    }
        大家可以看到,上述代码没有涉及到被拷贝对象的任何内部细节,所以说它是一段通用的代码,适用于任何对象,只不过效率比较低下。

发表于 @ 2006年10月14日 17:31:00|评论(loading...)|编辑

旧一篇: 在Eclipse中使用JUnit4进行单元测试(高级篇)

评论

#wjjdlove 发表于2008-03-02 21:38:46  IP: 218.19.163.*
貌似不错呢
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 华丽的痘痘