- 浏览: 70456 次
最新评论
-
waret:
"&" "ctrl+z& ...
2011-12-13 -
waret:
在软件设计的过程中中有一些基本的原则,其中有一条是少用继承,多 ...
2011-11-14 -
waret:
1、序列化是干什么的? 简单说就是为了保存在内存中的各种对象 ...
2011-11-15 -
waret:
吼吼~最小长度为5~
2011-10-22
代码的简洁性:
代码可以通过不断的修改获得简洁并且功能强大的效果。
接口的设计与设计模式。
java将对象序列化到文件:
序列化的好处:将对象序列化到文件,当需要时将序列化的文件读取到内存中,读取的时间比从未序列化的文件中读取的时间少。通过将中间结果的对象序列化到文件中进一步提高了程序运行的速度。
序列化的方法:用文件输出流打开目标文件,使用ObjectOutputStream类的writeObject将对象序列化到文件中,读取时采用ObjectInputStream类的readObject。
代码可以通过不断的修改获得简洁并且功能强大的效果。
接口的设计与设计模式。
java将对象序列化到文件:
序列化的好处:将对象序列化到文件,当需要时将序列化的文件读取到内存中,读取的时间比从未序列化的文件中读取的时间少。通过将中间结果的对象序列化到文件中进一步提高了程序运行的速度。
序列化的方法:用文件输出流打开目标文件,使用ObjectOutputStream类的writeObject将对象序列化到文件中,读取时采用ObjectInputStream类的readObject。
评论
1 楼
waret
2011-11-16
1、序列化是干什么的?
简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
2、什么情况下需要序列化
a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
3、当对一个对象实现序列化时,究竟发生了什么?
在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:
Foo myFoo = new Foo();
myFoo .setWidth(37);
myFoo.setHeight(70);
当通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,70)都被保存到foo.ser文件中,这样以后又可以把它 从文件中读出来,重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对 象。
FileOutputStream fs = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myFoo);
4、实现序列化(保存到一个文件)的步骤
a)Make a FileOutputStream
java 代码
FileOutputStream fs = new FileOutputStream("foo.ser");
b)Make a ObjectOutputStream
java 代码
ObjectOutputStream os = new ObjectOutputStream(fs);
c)write the object
java 代码
os.writeObject(myObject1);
os.writeObject(myObject2);
os.writeObject(myObject3);
d) close the ObjectOutputStream
java 代码
os.close();
5、举例说明
java 代码
import java.io.*;
public class Box implements Serializable
{
private int width;
private int height;
public void setWidth(int width){
this.width = width;
}
public void setHeight(int height){
this.height = height;
}
public static void main(String[] args){
Box myBox = new Box();
myBox.setWidth(50);
myBox.setHeight(30);
try{
FileOutputStream fs = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myBox);
os.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
6、相关注意事项
a)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;
b)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;
c)并非所有的对象都可以序列化,,至于为什么不可以,有很多原因了,比如:
1.安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行rmi传输 等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。
2. 资源分配方面的原因,比如socket,thread类,如果可以序列化,进行传输或者保存,也无法对他们进行重新的资源分 配,而且,也是没有必要这样实现。
简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
2、什么情况下需要序列化
a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
3、当对一个对象实现序列化时,究竟发生了什么?
在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:
Foo myFoo = new Foo();
myFoo .setWidth(37);
myFoo.setHeight(70);
当通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,70)都被保存到foo.ser文件中,这样以后又可以把它 从文件中读出来,重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对 象。
FileOutputStream fs = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myFoo);
4、实现序列化(保存到一个文件)的步骤
a)Make a FileOutputStream
java 代码
FileOutputStream fs = new FileOutputStream("foo.ser");
b)Make a ObjectOutputStream
java 代码
ObjectOutputStream os = new ObjectOutputStream(fs);
c)write the object
java 代码
os.writeObject(myObject1);
os.writeObject(myObject2);
os.writeObject(myObject3);
d) close the ObjectOutputStream
java 代码
os.close();
5、举例说明
java 代码
import java.io.*;
public class Box implements Serializable
{
private int width;
private int height;
public void setWidth(int width){
this.width = width;
}
public void setHeight(int height){
this.height = height;
}
public static void main(String[] args){
Box myBox = new Box();
myBox.setWidth(50);
myBox.setHeight(30);
try{
FileOutputStream fs = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myBox);
os.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
6、相关注意事项
a)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;
b)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;
c)并非所有的对象都可以序列化,,至于为什么不可以,有很多原因了,比如:
1.安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行rmi传输 等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。
2. 资源分配方面的原因,比如socket,thread类,如果可以序列化,进行传输或者保存,也无法对他们进行重新的资源分 配,而且,也是没有必要这样实现。
发表评论
-
hadoop集群配置问题及思考
2013-04-07 14:28 759遇到的问题如下: 网上 ... -
Java再学习
2012-09-04 15:20 0面向对象中的对象,像现实生活中的“对象”或“物品”一样,具有一 ... -
近期总结
2012-08-16 21:10 6651.使用ubuntu系统更新源安装软件,有时就不好用的,比如m ... -
C中的printf
2012-07-22 14:34 731C中的printf计算参数时是从右到左压栈的 -
httpclient解析gzip网页
2012-07-12 11:17 1422转自http://www.cnblogs.com/yesun/ ... -
java string 全角半角转换
2012-07-03 16:38 1166/** * 全角空格为12288,半角空格为32 其他字符 ... -
程序员的美德
2012-06-25 16:22 724对数值敏感 实验的欲望 良好的数学功底 -
ubuntu 挂载虚拟机镜像
2012-06-23 14:54 6911.losetup /dev/loop10 /.....img ... -
如何高效的开会
2012-06-21 16:37 716转自知乎http://www.zhihu.com/questi ... -
ubuntu 命令行使用ftp上传文件
2012-06-19 09:08 25981.ftp 主机IP地址 2.输入用户名和密码 3.mput ... -
mysql数据库的导入和导出
2012-06-19 09:07 723导出: mysqldump 用户名 密码 数据库名 > ... -
mysql 数据库不支持中文编码问题
2012-06-18 22:00 1237mysql默认的编码为latin1.在插入中文时会出现乱码。解 ... -
mysql数据库编码修改
2012-06-18 16:31 862在linux下修改3个my.cnf的1个/etc/mysql/ ... -
HTTP cache-control 管理
2012-06-15 22:28 728cache-control设置为no cache,must-r ... -
mysql数据库建库、建表、插入命令
2012-06-15 22:26 1606建库 create database 库名; use 库名; ... -
java中string的函数split需要注意的地方
2012-06-14 09:37 787split在分隔字符串时,如果被分割的字符串是空字符串,即为“ ... -
近期学习整理
2012-06-13 14:37 6901.group by ...having...构建约束查询 2 ... -
LINUX bash中字符串单引号和双引号的区别
2012-06-04 09:59 986单引号中所有字符都被当做普通字符对待,所有环境变量、转义字符、 ... -
建立软链接和硬链接的命令
2012-06-02 09:08 1269软链接:ln -s 目录或文件 连接名 硬链接:ln -d 文 ... -
LINUX帮助手册区号
2012-05-31 15:20 631区号类别1常用命令2系统调用3库调用4特殊文件5文件格式和惯例 ...
相关推荐
UniDAC(Universal Data Access Components)是一款高效、强大的数据库连接组件库,版本号为v.4.1.3,发布日期为2011年11月15日。这款组件库专为开发者设计,旨在提供对多种数据库系统的无缝连接支持,极大地简化了...
国际标准化组织(ISO - International Organization for Standardization).2011-12-08[引用日期2014-11-15] 2.ISO/IEC JTC1/SC22/WG14 - C: Approved standards .Open Standards.2011-04-12[引用日期2014-11-26...
Retrieved 2011-11-12. ISO/IEC 7816-1:1998/Amd 1:2003 Maximum height of the IC contact surface". Iso.org. 2011-01-31. Retrieved 2011-11-12. ISO/IEC 7816-2:2007 Identification cards — Integrated ...
2011-09-27 11:00 100,972 ecdsatest.ilk 2011-09-27 11:00 140,288 ecdsatest.pdb 2011-09-27 11:01 114,778 ectest.exe 2011-09-27 11:01 140,400 ectest.ilk 2011-09-27 11:01 156,672 ectest.pdb 2011-09-27 11:...
**说明:**这里将2011-11-15这个日期加上两个月份,得到了2012-01-15。 #### 八、总结 通过以上内容,我们详细介绍了Oracle中日期与字符串转换的各种方法。这些转换不仅限于简单的日期格式化,还包括了日期的加减...
建立一个数据库名为jdglxt create database jdglxt; on ( name='酒店管理_主',filename='d:\新建文件夹\...insert into customer(c_name,c_no,c_pay,c_booktime) values('小阳','1234567891018',388,'2011-11-15')
《ISO 26262-1:2011 道路车辆-功能安全-词汇》是国际标准化组织(ISO)发布的一份重要标准,首次发布于2011年11月15日,旨在规范汽车行业的功能安全领域。这份标准是ISO 26262系列标准的第一部分,主要关注的是与...
2011-11-22|15:33:21|PAY|user555|SUCC 2011-11-22|15:37:30|PAY|user666|SUCC 2011-11-22|15:45:05|PAY|user777|FAIL 本项目会根据如上日志生成的“步调”重新读入日志,并使用个性化定义的Process进行处理,重跑...
2011-10-04 13:01 <DIR> . 2011-10-04 13:01 <DIR> .. 2011-10-04 13:01 <DIR> 内存 2011-10-04 13:02 <DIR> 字符串 2011-10-04 13:09 4,635,835 A.rar 2011-10-04 14:25 <DIR> 反...2011-11-20 11:55 <DIR> drivers
**标题:**PHP安全新闻早8点周刊版(2011-11-09 星期三)至(2011-11-15 星期二) **描述:**介绍了关于PHP变量拼接及动态变量使用的安全性和注意事项。 **知识点概述:** - 变量拼接的正确用法与陷阱。 - 动态变量...
"Linux命令大全 2011-12-10"文档可能是当时整理的一份详尽的Linux命令参考,包含了2011年11月20日之前所有重要的命令及其用法。虽然时间已过去多年,但许多基础命令仍然沿用至今,因此这份资料依然具有很高的学习...
| 2011-12-15--2011-12-31 | 修改开题报告、定稿 | 2011-12-31 | | 2012-01-01--2012-04-15 | 完成论文初稿 | 2012-04-15 | | 2012-04-16--2012-05-16 | 修改、完善毕业论文〔设计〕 | 2012-05-16 |
2016-11-09(不点) 0x8205 bit 5 = 1: 使checkkey闲置循环停止指令。 2016-04-13(yaya) 支持动画菜单 setmenu --graphic-entry=类型=菜单行数=菜单列数=图形宽(像素)=图形高(像素)=菜单行间距(像素) 菜单项0...
【u-boot 2011.12 移植】涉及的知识点主要集中在嵌入式Linux系统的引导加载器u-boot的移植过程,特别是针对S3C2440处理器的移植。下面将详细介绍这些内容: 1. **配置编译环境**: - 首先,你需要从指定FTP服务器...
2011-03-24 11:58 103,949 UML图0.docx 2011-03-24 17:27 16,640 UML时间图.docx 2011-03-24 17:29 200,071 UML用例概要.docx 2011-03-24 17:14 94,457 UML类图0.docx 2011-03-24 17:15 152,888 UML类图1.docx 2011-...
15. **职业素养**:团队协作、沟通能力、项目管理、持续学习的心态。 这些内容的深入理解和熟练掌握将极大地提高Java开发者在面试中的竞争力。通过这个资源,求职者可以系统地复习和准备,确保在面试中展现出扎实的...
statrUml 2.8.0版本,更新时间2011-11-15日发布 ,目前官方更新到2.8.1版本
| Test1 | | | | | | 2011-11-15 | 无 | 表 1-4 Test2测试用例的测试结果 | 测试用例 ID | 目的 | 测试程序能否识别等腰三角形 | 输入a=4;b=4;c=5 | 预期结果输出“ 三角形是等腰三角形” | 测试结果输出“ 三角形...