0

我在行上有意外的文档结尾:

Document xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(inputStream);

但是我有一些线索,我认为我的错误可能与 SAX 解析器无关。这是我的简化代码片段。

    public boolean createDataList(InputStream inputStream) {

        try {               
            XmlHelper xmlHelper = new XmlHelper();

            ArrayList<Category> categories = xmlHelper.getCategoriesFromXml(inputStream);
            ArrayList<Budget> budgetEntries = xmlHelper.getBudgetFromXml(inputStream);                  
            ArrayList<StandingOrder> standingOrders = xmlHelper.getOrdersFromXml(inputStream);

            return true;

        } catch (Exception e) {

            return false;
        }           
    }

3 ArrayList getter 指向导致问题的行。它们都使用相同的 InputStream。所有方法都几乎相同,我相信它们可以正常工作......只是分开。只有第一个数组 getter 成功执行,第二个和第三个总是失败,不管它是什么顺序,第一个都很好。

我怀疑使用相同的 InputStream 有问题,我试图在每个数组 getter 之后关闭输入 - 没有效果。请给我一些线索。我真的很感激

4

1 回答 1

1

我怀疑在阅读时,输入流会在您的文件中前进直到最后。因为我不认为 SAX 解析器调用 mark() 和 reset() 来将阅读器定位到文件的开头,所以当你第二次调用它时没有什么可以阅读的了。

作为旁注,您为什么不同时解析和创建所有 3 个列表,然后通过 getter 将它们暴露在 XMLHelper 之外?这也应该可以提高您的性能,避免至少 2 次完整的 I/O 操作。

于 2012-06-18T18:50:55.327 回答