繁体   English   中英

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

[英]Unexpected end of document on SAX parser (input stream multiple use suspected)

我在线上的文档意外结束:

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获取器指向导致问题的行。 它们都使用相同的InputStream。 所有方法几乎都是相同的,我确信它们可以正常工作……只是分开。 只有第一个数组getter成功执行,第二个和第三个总是失败,无论顺序如何,第一个都可以。

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

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

附带说明一下,为什么不同时解析和创建所有3个列表,然后通过吸气剂将它们显示在XMLHelper之外呢? 这也应该避免至少2次完整的I / O操作,从而提高性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM