华丽的痘痘
努力成为一个有价值的程序员
andycpp
登录
注册
全站
当前博客
空间
博客
好友
相册
留言
王亚楠
ID:andycpp
共
42204
次访问,排名
2417
好友
7
人,关注者
21
人
做一名合格地java教师
andycpp的文章
原创 40 篇
翻译 1 篇
转载 12 篇
评论 14 篇
最近评论
czdvcc:
wow power leveling
hukaibao2007:
不错
wjjdlove:
貌似不错呢
wjjdlove:
thanks
wjjdlove:
不错,学习了
文章分类
JAVA技术
(RSS)
常见算法
(RSS)
随笔
(RSS)
收藏
经典文章
相册
我的相册
高手专栏
Web高手buaawhl的专栏
(RSS)
存档
2007年09月(3)
2007年08月(7)
2007年07月(11)
2007年06月(5)
2007年02月(1)
2006年10月(7)
2006年09月(5)
2006年08月(1)
2006年06月(1)
2006年04月(2)
2006年03月(3)
2006年02月(3)
软件项目交易
订阅我的博客
通过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.*
貌似不错呢
发表评论
姓 名:
主 页:
校验码:
看不清,换一张
当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击
登录