【问题标题】:XMLDecoder.readObject() returns nullXMLDecoder.readObject() 返回 null
【发布时间】:2009-05-03 09:33:41
【问题描述】:

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

【问题讨论】:

    标签: java xml


    【解决方案1】:

    Vista 和 XP 机器上使用的 Java 版本是否相同? 还要检查最初用于创建 xml 的 Java 版本。

    另一个测试是在 XP 盒子上编码一个对象并尝试读回它。

    【讨论】:

    • 已经有一段时间了:) 最终我做到了,并且成功了。
    【解决方案2】:

    如果它在您的 XP 机器上失败,但在您的 Vista 机器上运行,那么这听起来像是一些环境问题。

    由于它涉及 XML,我想知道是否存在字符编码问题,并且您的 Vista/XP 环境设置了不同的编码属性。如果是这种情况,那么 XMLDecoder 可能无法正确解析 XML。

    在两个安装中检查您的系统属性file.encoding。看看它们是否不同会很有趣。您的 .xml 文件是否指定了字符编码?

    【讨论】:

    • XML 文件指定 UTF-8 编码。您说得对,file.encoding 不匹配,我现在无法检查 Vista 机器,但我认为它不匹配。我在我的机器上将 file.encoding 设置为 UTF-8 并尝试将其转换为 UTF-8(有和没有 BOM),解码后的对象仍然为空。
    • 如果 XML 文件指定了编码,那么 VM 编码应该无关紧要
    【解决方案3】:

    这意味着您的InputStream 以某种方式被XmlDecoder 视为“空”。

    你可以试试:

    XMLDecoder decoder = new XMLDecoder(new FileInputStream("Params.xml"));
    

    直接使用FileInputStream 而不是BufferedInputStream ?

    或者在你的XmlEncoder初始化使用之前尝试reset()你的BufferedInputStream

    【讨论】:

    • 直接用FileInputStream试了一下,返回的对象还是null
    【解决方案4】:

    您可以尝试使用自定义ExceptionListener 构建您的XMLDecoder,并在其中放入println

    public XMLDecoder(InputStream in,
                      Object owner,
                      ExceptionListener exceptionListener)
    

    另外,如果流不包含对象(或不再包含对象),readObject 会抛出 ArrayIndexOutOfBoundsException,您是否捕获了该异常?

    【讨论】:

    • 如果我第二次调用 readObject() 可以触发 ArrayIndexOutOfBoundsException。所以 something 被第一次读取。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2020-06-19
    • 2011-10-15
    相关资源
    最近更新 更多