紫蝶∏飛揚↗
Purple Butterfly Flying QQ群:7101519 Flex,Ext,Spring,Hibernate,EOS,SpringSecurity,Struts http://algz.googlecode.com/svn/trunk/
首页
新随笔
联系
聚合
管理
随笔-9 评论-168 文章-266 trackbacks-0
[转]Java Serializable(序列化)的理解和总结
1、序列化是干什么的?
简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
2、什么情况下需要序列化
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
3、当对一个对象实现序列化时,究竟发生了什么?
在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:
1
Foo myFoo
=
new
Foo();
2
myFoo .setWidth(
37
);
3
myFoo.setHeight(
70
);
当 通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,70)都被保存到foo.ser文件中,这样以后又可以把它 从文件中读出来,重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对 象。
1
FileOutputStream fs
=
new
FileOutputStream(
"
foo.ser
"
);
2
ObjectOutputStream os
=
new
ObjectOutputStream(fs);
3
os.writeObject(myFoo);
4、实现序列化(保存到一个文件)的步骤
a)Make a FileOutputStream
1
FileOutputStream fs
=
new
FileOutputStream(
"
foo.ser
"
);
b)Make a ObjectOutputStream
1
ObjectOutputStream os
=
new
ObjectOutputStream(fs);
c)write the object
1
os.writeObject(myObject1);
2
os.writeObject(myObject2);
3
os.writeObject(myObject3);
d) close the ObjectOutputStream
1
os.close();
5、举例说明
1
import
java.io.
*
;
2
3
4
public
class
Box
implements
Serializable
5
{
6
private
int
width;
7
private
int
height;
8
9
public
void
setWidth(
int
width)
{
10
this
.width
=
width;
11
}
12
public
void
setHeight(
int
height)
{
13
this
.height
=
height;
14
}
15
16
public
static
void
main(String[] args)
{
17
Box myBox
=
new
Box();
18
myBox.setWidth(
50
);
19
myBox.setHeight(
30
);
20
21
try
{
22
FileOutputStream fs
=
new
FileOutputStream(
"
foo.ser
"
);
23
ObjectOutputStream os
=
new
ObjectOutputStream(fs);
24
os.writeObject(myBox);
25
os.close();
26
}
catch
(Exception ex)
{
27
ex.printStackTrace();
28
}
29
}
30
31
}
32
33
6、相关注意事项
a)序列化时,只对对象的状态进行保存,而不管对象的方法;
b)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;
c)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;
d)并非所有的对象都可以序列化,,至于为什么不可以,有很多原因了,比如:
1.安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行rmi传输 等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。
2. 资源分配方面的原因,比如socket,thread类,如果可以序列化,进行传输或者保存,也无法对他们进行重新的资源分 配,而且,也是没有必要这样实现。
----------转
http://xiebh.javaeye.com/blog/121311
posted on 2007-11-16 10:46
紫蝶∏飛揚↗
阅读(280)
评论(0)
编辑
收藏
所属分类:
随想
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
myeclipse不能自动提示代码的解决方法
Myeclipse8.6正确安装svn插件的方法(其它采用更新URL的方式在集成后易出问题)
windows 2003 修改应用程序池默认连接数(5个)
使用JAVA发送mail时,总是报错
[转]在MyEclipse中调试部署到Websphere上的程序(测试正常,实际没有这复杂,可看另一篇)
websphere 部署myeclipse开发打包的WAR文件报错:
linux上安装websphere6.1不弹出安装界面
websphere控制台中启动/停止IBM HTTP SERVER服务报错
RBAC基于角色的访问控制(Role-Based Access Control)
SwfUpload(文件上传组件) 使用过程中的小结(以下内容只作为个人笔记记载)
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
常用链接
我的随笔
我的文章
我的评论
我的参与
最新评论
留言簿
(5)
给我留言
查看公开留言
查看私人留言
随笔档案
(9)
2011年12月 (1)
2011年6月 (1)
2011年2月 (1)
2011年1月 (2)
2010年9月 (1)
2009年9月 (2)
2009年5月 (1)
文章分类
(339)
ActionScript3
C#(1)
CSS(21)
div+css+js代码(29)
EOS(9)
EXTJS(61)
Extjs4(1)
FLEX 4(2)
Hibernate(22)
JAVA(18)
JAVA 串行通信(2)
JQuery(4)
JSF(32)
Json(3)
JSP(9)
Linux(1)
MyEclipse 使用方法(4)
Python(1)
Spring(23)
Spring Security(2)
Struts1/2(4)
WEBService(2)
Websphere(4)
个人简历(1)
数据库(15)
数据转换(7)
目录(2)
计算机技术与软件专业技术资格(水平)考试(5)
重点(20)
随想(34)
文章档案
(265)
2014年4月 (1)
2013年9月 (1)
2013年3月 (1)
2013年2月 (1)
2013年1月 (1)
2012年8月 (1)
2012年6月 (2)
2012年5月 (2)
2012年4月 (1)
2012年3月 (5)
2012年2月 (2)
2011年12月 (6)
2011年11月 (3)
2011年8月 (1)
2011年6月 (8)
2011年5月 (1)
2011年4月 (2)
2011年3月 (9)
2011年2月 (1)
2011年1月 (9)
2010年12月 (1)
2010年11月 (2)
2010年10月 (1)
2010年9月 (11)
2010年7月 (1)
2010年6月 (7)
2010年5月 (7)
2010年4月 (9)
2010年3月 (1)
2010年1月 (2)
2009年12月 (3)
2009年11月 (7)
2009年10月 (11)
2009年9月 (7)
2009年8月 (7)
2009年5月 (9)
2009年4月 (10)
2009年3月 (11)
2009年2月 (9)
2008年10月 (3)
2008年9月 (18)
2008年8月 (4)
2008年7月 (3)
2008年6月 (3)
2008年5月 (7)
2008年4月 (13)
2008年3月 (16)
2008年2月 (3)
2007年11月 (12)
2007年10月 (9)
最新随笔
1. Java发送http请求 (get 与 post方法请求)
2. 反射生成笔记
3. JAVA语言___文件下载功能模板.
4. [转]hibernate之生成的和默认的属性值(使用generated刷新实体)
5. CENTOS 简介和镜像下载
6. JS 创建类---混合的构造函数/原型方式
7. MyEclipse 布署相同分支的项目时,报错 Exploded location overlaps an existing deployment解决办法.
8. Django1.4 报错:Error: No module named mysite 解决方法
9. [转]UML类图符号 各种关系说明以及举例
10. 主机为202.130.82.97子网屏蔽码为255.255.192.0,它所处的网络为什么
11. Extjs.tree.treePanel 自动查找node
12. Myeclipse7.0和Myeclipse8.5 安装插件(采用link方式)
13. javascript中的空串,false,和0 比较运算关系
14. 软件设计师重点难点---原码,反码,补码,移码计算方式
15. 软件设计师重点难点---磁盘格式化容量,非格式化容量,数据传输率计算
16. 软件设计师重点难点——系统可靠性计算
17. EditorGridPanel 控制单元格的编辑功能
18. [转] JSON-lib框架,转换JSON、XML不再困难
19. JS 数组对象的John方法
20. JS 双竖线运算符
21. 连接字符串代码(写的不错)
22. [转]Hibernate Annotation几种关联映射 虽然是转载,但仔细看还是很有帮助的.
23. [转] 关于oracle with table as 创建临时表的用法示例
24. Hibernate 注解映射 设置默认值的异常及解决方法
25. [转] Oracle 语法之 OVER (PARTITION BY ..) 及开窗函数
26. [转] 页面中调用系统常用的对话框需要用到的classid
27. [转] WebBrowser.ExecWB的完整说明
28. hibernate 级联(联表)删除的问题
29. sql plus操作oracel(windows平台)基础之简易新手篇
30. EOS让失业的工人找到工作,让专业的技术人员下岗.
最新评论
1. re: JSF ->JavaScript 用 A4J 完成前台后台数据交互
RETYUGIHOJ
--GVFZ
2. re: [转]JSF中文输入乱码问题解决方法
个体gay特权 让我去听听 天庆 4安琪儿 我去而他却让他 企鹅问题探讨去 去问问情人 如图切尔奇请问天然气热天气额
--啊速度发
3. re: Java 日期时间 Date类型,long类型,String类型表现形式的转换
评论内容较长,点击标题查看
--Fzh
4. re: struts2 修改配置文件的默认位置报异常的解决方法[未登录]
确实能解决问题,感谢楼主
--淹死的鱼
5. re: Extjs 日期的使用方法(显示,定义,接收,提交,转换)
jh,m v,j
--ojjj
阅读排行榜
1. Extjs 日期的使用方法(显示,定义,接收,提交,转换)(5335)
2. JS 双竖线运算符(3268)
3. [转]网页设计流程(1944)
4. [转]网站制作流程(1842)
5. js中指针与函数名(1181)
评论排行榜
1. [转]网页设计流程(4)
2. Extjs 日期的使用方法(显示,定义,接收,提交,转换)(1)
3. [转]网站制作流程(1)
4. JS 双竖线运算符(1)
5. EOS让失业的工人找到工作,让专业的技术人员下岗.(1)