`
l_mai
  • 浏览: 70461 次
社区版块
存档分类
最新评论
  • waret: "&" "ctrl+z& ...
    2011-12-13
  • waret: 在软件设计的过程中中有一些基本的原则,其中有一条是少用继承,多 ...
    2011-11-14
  • waret: 1、序列化是干什么的?  简单说就是为了保存在内存中的各种对象 ...
    2011-11-15
  • waret: 吼吼~最小长度为5~
    2011-10-22

2011-11-15

 
阅读更多
代码的简洁性:
代码可以通过不断的修改获得简洁并且功能强大的效果。
接口的设计与设计模式。

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类,如果可以序列化,进行传输或者保存,也无法对他们进行重新的资源分 配,而且,也是没有必要这样实现。

相关推荐

    UniDAC v.4.1.3 2011-11-15

    UniDAC(Universal Data Access Components)是一款高效、强大的数据库连接组件库,版本号为v.4.1.3,发布日期为2011年11月15日。这款组件库专为开发者设计,旨在提供对多种数据库系统的无缝连接支持,极大地简化了...

    ISO+IEC+14882-2011-最终正式C++11标准.pdf

    国际标准化组织(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...

    ISO IEC 7816(1-13, 15)

    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 ...

    openssl 的VC工程for openssl-1.0.0e

    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:...

    oracle日期字符串的相互转换

    **说明:**这里将2011-11-15这个日期加上两个月份,得到了2012-01-15。 #### 八、总结 通过以上内容,我们详细介绍了Oracle中日期与字符串转换的各种方法。这些转换不仅限于简单的日期格式化,还包括了日期的加减...

    C#数据库酒店管理

    建立一个数据库名为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 Road vehicles-Functional safety-Vocabulary 2011-11.pdf

    《ISO 26262-1:2011 道路车辆-功能安全-词汇》是国际标准化组织(ISO)发布的一份重要标准,首次发布于2011年11月15日,旨在规范汽车行业的功能安全领域。这份标准是ISO 26262系列标准的第一部分,主要关注的是与...

    log-walker.rar_walker

    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点

    **标题:**PHP安全新闻早8点周刊版(2011-11-09 星期三)至(2011-11-15 星期二) **描述:**介绍了关于PHP变量拼接及动态变量使用的安全性和注意事项。 **知识点概述:** - 变量拼接的正确用法与陷阱。 - 动态变量...

    Linux命令大全 2011-12-10

    "Linux命令大全 2011-12-10"文档可能是当时整理的一份详尽的Linux命令参考,包含了2011年11月20日之前所有重要的命令及其用法。虽然时间已过去多年,但许多基础命令仍然沿用至今,因此这份资料依然具有很高的学习...

    基于-单片机光电开关转速测量装置设计.doc

    | 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 |

    grub4dos-V0.4.6a-2017-02-04更新

    2016-11-09(不点) 0x8205 bit 5 = 1: 使checkkey闲置循环停止指令。 2016-04-13(yaya) 支持动画菜单 setmenu --graphic-entry=类型=菜单行数=菜单列数=图形宽(像素)=图形高(像素)=菜单行间距(像素) 菜单项0...

    u-boot 2011.12 移植

    【u-boot 2011.12 移植】涉及的知识点主要集中在嵌入式Linux系统的引导加载器u-boot的移植过程,特别是针对S3C2440处理器的移植。下面将详细介绍这些内容: 1. **配置编译环境**: - 首先,你需要从指定FTP服务器...

    图UML_设计教程集合

    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-...

    2011-2017年Java面试大汇总

    15. **职业素养**:团队协作、沟通能力、项目管理、持续学习的心态。 这些内容的深入理解和熟练掌握将极大地提高Java开发者在面试中的竞争力。通过这个资源,求职者可以系统地复习和准备,确保在面试中展现出扎实的...

    StarUML-v2.8.0 附破解

    statrUml 2.8.0版本,更新时间2011-11-15日发布 ,目前官方更新到2.8.1版本

    功能性测试(黑盒测试)实验报告可用.pdf

    | Test1 | | | | | | 2011-11-15 | 无 | 表 1-4 Test2测试用例的测试结果 | 测试用例 ID | 目的 | 测试程序能否识别等腰三角形 | 输入a=4;b=4;c=5 | 预期结果输出“ 三角形是等腰三角形” | 测试结果输出“ 三角形...

Global site tag (gtag.js) - Google Analytics