Java XML编码器保存对象,XML编码器已恢复
Java对象XML格式以下是一个演示如何保存数据的示例程序。
XML 输出包含java.beans.XMLEncoder用这个。
还java.beans.XMLDecoder我们还将介绍一个使用此方法来恢复已保存对象的示例程序。
示例程序
- 声明为私有的字段会在定义 Getter 和 Setter 方法时保存。
- 只有当变量发生更改时,才会保存 XML 文件。
- 您还可以指定要保存的对象,例如 java.util.HashMap 或 java.util.ArrayList。这对于简单地保存对象的状态非常方便。
// 将字节数据输出到文件
fileStream = new FileOutputStream(path);
fileStream.write(xmlbuff);
fileStream.flush();
} 最后 {
如果 (enc != null) {
enc.close();
}
如果 (out != null) {
out.close();
}
如果 (fileStream != null) {
fileStream.close();
}
}
}
/**
* 从指定路径 [path] 的 XML 文件中恢复对象。
* 必须使用 java.beans.XMLEncoder 保存 XML 文件。
* @param path 对象存储的路径。
* @throws FileNotFoundException
* 如果路径名指定的文件不存在
*/
public static Object readXML(String path) throws FileNotFoundException {
XML解码器d = null;
尝试 {
d = new XMLDecoder(new BufferedInputStream(
new FileInputStream(path));
返回 d.readObject();
} 最后 {
如果 (d != null) {
d.close();
}
}
}
*以下类将用作要保存的类的示例。
执行结果
◆示例
// 从 XML 恢复 FreeSoft 类实例
FreeSoft freeSoft2 = (FreeSoft)readXML(“C:\\FreeSoft.xml”);
System.out.println("软件名称:" + freeSoft2.getName());
System.out.println(“URL:”+freeSoft2.getUrl());
} catch (Exception e) {
e.printStackTrace();
}
}
◆输出结果
软件名称:聊天和即时通讯!网址:https://chat-messenger.com/
◆C:\\FreeSoft.xml 的内容
使用该服务时需要注意的事项
虽然 java.beans.XMLEncoder 和 java.beans.XMLDecoder 类很方便,但在 Chat&Messenger 的实际使用中,我们发现了一个极其罕见的问题,即当使用 java.beans.XMLEncoder 输出 XML 时,文件会变成 0 字节。
读取零字节文件会导致 ParseException 异常被记录到“标准错误输出”中。
这是因为当创建 FileOutputStream 实例时,文件会变为空。
我认为这是由于 Java 进程在创建 FileOutputStream 实例之后但在输出 XML 数据之前关闭造成的。
Chat&Messenger 正在通过创建备份文件来解决这个问题,从而规避该问题。
