`
l_mai
  • 浏览: 63990 次
社区版块
存档分类
最新评论
  • 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

    可以连接多种数据库的通用组件库,可以用于连接Oracle,MySQL,DB2,PostgreSQL,SQLite,SQLServer,ASE,DBF,NexusDB,Access...等数据库

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

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

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

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

    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

    hibernate各个版本下载地址

    3.6.9.Final 2011-12-15 3.6.8.Final 2011-10-27 3.6.7.Final 2011-08-17 3.6.6.Final 2011-07-21 3.6.5.Final 2011-06-09 3.6.4.Final 2011-05-05 3.6.3.Final 2011-04-06 3.6.2.Final 2011-03-10 3.6.1....

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

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

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

    StarUML-v2.8.0 附破解

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

    Php安全新闻早8点

    Php安全新闻早8点周刊版(2011-11-09 星期三)至(2011-11-15 星期二)

    u-boot 2011.12 移植

    u-boot 2011.12 S3C2440移植

    高仿hao123网站源码

    2010-1-15 同步hao123分类顺序,最新更新hao123职业与爱好分类。 2010-7-28 全面同步hao123样式与分类。 2010-7-29 支持自定义设定所在城市的天气预报。 2010-10-20 同步团购分类。 2010-11-7 修改163与126邮箱...

    7lin精仿hao123源码.rar

    2011-11-9 增加对ie8、firefox、Chrome的兼容性。  2011-11-7 新增折扣分类。  2011-10-24 同步hao123首页时间、天气的显示方式。  2011-10-14 新增实用工具、彩票、音乐、小游戏聚合分类。  ...

    完美仿hao123网址导航(完整版),ASP带后台.rar

    2010-1-15 同步hao123分类顺序,最新更新hao123职业与爱好分类。 2010-7-28 全面同步hao123样式与分类。 2010-7-29 支持自定义设定所在城市的天气预报。 2010-10-20 同步团购分类。 2010-11-7 修改163与126邮箱登录...

    完美仿hao123网址导航(完整版).rar

    2010-1-15 同步hao123分类顺序,最新更新hao123职业与爱好分类。 2010-7-28 全面同步hao123样式与分类。 2010-7-29 支持自定义设定所在城市的天气预报。 2010-10-20 同步团购分类。 2010-11-7 修改163与126邮箱...

    几个重要的c程序源码.rar

    2012-06-11 15:14 6,642,870 u-boot-2011.06.7z 2012-06-11 15:22 1,198,619 uCOS-II应用举例.rar 2012-06-11 15:15 7,130 VB浏览器[源码].rar 2012-06-11 15:28 29,345,118 VC++图像处理程序设计.pdf.rar 2012-06-...

    STARTUML2.8版本

    statrUml 2.8版本,官方最新版,更新时间2011-11-15日发布

    XueTr 0.39 2011-3-6更新

    11.文件系统查看,支持基本的文件操作 12.查看(编辑)IE插件、SPI、启动项、服务、Host文件、映像劫持、文件关联、系统防火墙规则、IME 13.ObjectType Hook检测和恢复 14.DPC定时器检测和删除 15.MBR Rootkit检测和...

Global site tag (gtag.js) - Google Analytics