SAX解析器上的文档意外结束(怀疑输入流多次使用)

时间:2012-06-18 18:42:03

标签: java android inputstream sax

我的文件意外结束了:

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

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

    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之后关闭输入 - 没有效果。请给我一些线索。我真的很感激

1 个答案:

答案 0 :(得分:1)

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

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