快速业务通道

Merlin的魔力: 长期持久性 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20

Merlin的魔力: 长期持久性

时间:2011-02-02 IBM John Zukowski

Merlin 的一种新功能在 Sun 的 Swing Connection 中以各种形式出现已有一段时间了,实际上它首次被讨论是在 1999 年的 JavaOne 展示会上。这个功能可以将 JavaBean 组件状态长期持久地保存在 XML 文档中。序列化工作适合短期编组的需要(对于 CORBA 和 RMI)或适合将状态信息保存在一个执行的 servlet 中。但是序列化会产生许多问题,包括类库版本或 Java 运行时环境方面的问题。新的 XMLEncoder / XMLDecoder 类允许将 JavaBean 组件状态转储到文本文件中以便易于在 Java 程序外部进行修改,或者更有可能的是为了生成这种文件。让我们看一下如何使用这两个类以及如何分析生成的文件。

开始

开始时,我们需要定义一个我们要初始化、保存和重新创建的类。让我们定义一个带有以下 4 个属性的类:

测试分数的整数数组,可当做一个经过索引的属性

只读 float 属性,表示平均分数

String 属性,代表学生的姓名

java.awt.Point 属性,代表学生在班里的座位

这个可变的属性类型集将演示编码器如何处理不同的数据类型。 清单 1 显示样本类定义。(它也在 net.zukowski.ibm 包中。请参阅 参考资料,下载本文中使用的代码。)那儿甚至有一个有用的 toString() 方法,我们可以使用这个方法直观地看到检索出的值是设置正确的。

保存状态

既然我们有了用于保存的类,我们可创建一个实例并使用 XMLEncoder 进行保存。这个类可以在 java.beans 包中被找到,它的工作原理与 ObjectOutputStream 相同,但不是 OutputStream 类层次结构的一部分。您可以将要保存到的输出流对象传入 OutputStream ,并调用其 writeObject() 方法将对象写入到流中。这很简单。

清单 2. 创建一个实例并将其保存为 XML // Create   Sample sample = new Sample();   sample.setScores(new int[] {100, 90, 75});   sample.setName("Gore");   sample.setSeat(new Point(5, 3));   // Save   XMLEncoder encoder = new XMLEncoder(    new BufferedOutputStream(     new FileOutputStream("Sample.xml")));   encoder.writeObject(sample);   encoder.close();

检查格式

当检查清单 3 所示的 XML 文件时,您会注意到如何读取格式是与输出在一起编码的,在本例中是与 v1.4 beta 中的 XMLDecoder 一起编码的。这种方法使得将来的发行版能够更改格式,这样如果使用的是比较旧的 XML 文件,新的解码器在生成 XML 文件时会知道使用的是哪种编码类型。从本质上来说,这个文件是一个正规 XML 文件,服从特定的 DTD(本文中没有引用到)。但是,解码器能够识别该文件。

清单 3. 经过编码的 XML 样本实例<?xml version="1.0" encoding="UTF-8"?> <java version="1.4.0-beta" class="java.beans.XMLDecoder">   <object class="net.zukowski.ibm.Sample">    <void property="name">     <string>Gore</string>    </void>    <void property="scores">     <array class="int" length="3">      <void index="0">       <int>100</int>      </void>      <void index="1">       <int>90</int>      </void>      <void index="2">       <int>75</int>      </void>     </array>    </void>    <void property=&quo

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号