XMLDecoder.readObject()返回null

时间:2009-05-03 09:33:41

标签: java xml

我正在尝试使用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()); 
    }

4 个答案:

答案 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,您是否捕获该异常?