我正在尝试使用XMLDecoder从XML文件中读取对象。 结构似乎没问题,但是当我调用readObject()方法时,我得到null而不是我期望的对象。
文件存在,创建的BufferedInputStream正确读取文件。 这个代码在它上面写的原始Vista笔记本电脑上运行正常,但在我的Win Xp机器上失败了。
try {
XMLDecoder decoder = new XMLDecoder(new BufferedInputStream(
new FileInputStream("Params.xml")));
Params = (Parameters)decoder.readObject();
decoder.close();
} catch (FileNotFoundException e) {
System.out.println(e.toString());
}
答案 0 :(得分:1)
如果它在你的XP机器上失败,但在你的Vista机器上工作,那听起来像是一些环境问题。
由于涉及XML,我想知道是否存在字符编码问题,并且您的Vista / XP环境设置了不同的编码属性。如果是这种情况,则XMLDecoder可能无法正确解析XML。
检查两个安装上的系统属性file.encoding
。看看它们是否不同会很有趣。您的.xml文件是否指定了字符编码?
答案 1 :(得分:1)
是否在Vista和XP机器上使用了相同版本的Java? 另请检查最初用于创建xml的Java版本。
另一个测试是在XP盒子上编码一个对象并尝试将其读回。
答案 2 :(得分:0)
这意味着InputStream
以某种方式将XmlDecoder
视为“空”。
你可以尝试一下:
XMLDecoder decoder = new XMLDecoder(new FileInputStream("Params.xml"));
直接使用FileInputStream
代替BufferedInputStream
?
或者在reset()
初始化中使用之前尝试BufferedInputStream
XmlEncoder
{/ 1}}
答案 3 :(得分:0)
您可以尝试使用自定义XMLDecoder
构建ExceptionListener
并在其中添加println
。
public XMLDecoder(InputStream in,
Object owner,
ExceptionListener exceptionListener)
此外,如果流不包含任何对象(或没有其他对象),readObject
将抛出ArrayIndexOutOfBoundsException
,您是否捕获该异常?