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ゲッターが、問題の原因となっている行を指しています。それらはすべて同じInputStreamを使用します。すべての方法はほとんど同じです、そして私はそれらがうまくいくと確信しています...ちょうど別々に。最初の配列ゲッターのみが正常に実行され、2番目と3番目の配列ゲッターは常に失敗します。順序に関係なく、最初の配列は正常に実行されます。

同じInputStreamを使用することに何か問題があるのではないかと疑っています。各配列ゲッターの後で入力を閉じようとしていましたが、効果はありませんでした。手がかりを教えてください。本当にありがたいです

4

1 に答える 1

1

読み取り中に、入力ストリームがファイルを最後まで進むと思われます。SAX パーサーがリーダーをファイルの先頭に配置するために mark() と reset() を呼び出すとは思わないので、2 回目に呼び出したときに読み取るものは何も残っていません。

補足として、3 つのリストすべてを同時に解析して作成し、getter を介して XMLHelper の外部に公開してみませんか? これにより、パフォーマンスが向上し、少なくとも 2 回の完全な I/O 操作が回避されます。

于 2012-06-18T18:50:55.327 に答える