java中的对象序列化机制

java中的对象序列化机制

ID:30768927

大小:89.81 KB

页数:6页

时间:2019-01-03

java中的对象序列化机制_第1页
java中的对象序列化机制_第2页
java中的对象序列化机制_第3页
java中的对象序列化机制_第4页
java中的对象序列化机制_第5页
资源描述:

《java中的对象序列化机制》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、【转载]Java中的对象序列化机制<上篇〉(2012-03-0310:43:35)转a▼分类:Java学习对彖序列化机制允许把内存中的Java对彖包装成为与平台无关的二进制流,从而允许把这种一进制流持久保存在磁盘上或者通过网络将这种一进制流传输到另外的节点。然后再利用反序列化,将Java对象对10流屮恢复。1.使用对象流实现序列化使用对彖流序列化需要两个前捉:首先是被序列化的对象需要是可序列化的,在Java中对以通过实现标记接口Serializable来标记可序列化对彖的类,并不需耍实现接口中定义的任何方法。其次,序列化需要通过对象流这个处理流来处理,它内置的readObj()和writeOb

2、j()方法可以读取和写入Obj对象。对对象的序列化可以通过如卜-两个步骤进行:a.创建ObjectOutputStream,它需要包含一个节点流对彖;b.调用writeObject()方法,将需要被序列化的对象传入其中。这样,就将一个对象序列化成二进制流,它可以保存在文件或者字节数组屮。如下代码:1.//创建一个ObjectOutputstream输出流2.oos=newObjectOutputstream(3.newFileOutputStreamCobject.txt''));4.Personper=newPerson("孙悟空”,500);5.//将per对象写入输出流6.oos.wri

3、teObject(per);如果希望从二进制流中恢复Java对象,则需要使用反序列化,具体步骤如下:a.创建ObjectlnputStream对象,它需要包含的节点流需要和对应ObjectOutputStream包含的节点流对象对应;b.调用readObject()方法,返回一个Object对彖,就是当初被序列化的对彖。代码如下:1.〃创建一个ObjectlnputStream输岀流2.ois=newObjectInputStream(1.newFileinputStream(Mobject.txtM));2.//从输入流中读取一个Java对彖,并将其强制类型转换为Person类3.Perso

4、np=(Person)ois.readObject();在序列化中,需要注意如下儿点:a.反序列化读取的仅仅是Java对象的数据,注意是数据,包括对彖的类名和属性(不包括方法,静态属性以及transient属性)而不是对象Java类。因此采用反序列化时,必须提供该Java对象所属的class类文件,在反序列化后仍然后可调川序列化后的的对象以及没有被序列化的属性,是由这个class文件保证的;b.在序列化机制下读出对象的顺序需要与当时写入的顺序-•致;c.被序列化的对彖类的父类要么是可被序列化的,要么冇无参的构造方法;由于在创建子类吋,系统会隐式的创建其父类的实例,因此在反序列化时,也需要恢复其

5、父类的实例,也可以调用父类的无参构造方法。1.对象引用的序列化如果某个需要被序列化的对彖中冇属于另外一个类的属性,那么另外的那个类也必须是可以被序列化的,否则,即使该对象中实现了Serialisable接口,也无法将它序列化。在Java中的序列化机制中提供了如下算法:一个对象只能被序列化-•次,以后的序列化操作并不产生作用而仅仅是返回第一次序列化对象的编号。重复序列化对象Z后再进行反序列化操作得到的是指向同一个对彖的引丿IJ。即使在该对彖序列化Z后,修改其属性值后在进行序列化,反序列化得到的还是第一次序列化的对象。1.publicclassWriteTeacher2.{3.publicstat

6、icvoidmain(String[]args)4.{5.ObjectOutputStreamoos=null;6.try7.{&//创建一个0bjectOutputstream输出流9.oos=newObjectOutputStream(10.newFileOutputStream("teacher.txt"));11.Personper=newPerson(”孙悟空”,500);12.Teachert1=newTeacher(H唐僧”,per);13.Teachert2=newTeacher("菩提祖师",per);14.//依次将四个对象写入输出流15・oos.writeObject(t

7、1);16.oos.writeObject(t2);17.oos.writeObject(per);18.oos.writeObject(t2);19.20.}21.catch(lOExceptionex)22.{23.ex.printStackTrace();24.}25.finally26.{27.try28.{29.if(oos!=null)30.oos.close();31.}32.cat

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。