(以下はすべてJavaで記述されます)
潜在的に非常に大きいXMLドキュメントを入力として受け取るアプリケーションを構築する必要があります。ドキュメントは暗号化されます(XMLsecではなく、クライアントの既存の暗号化アルゴリズムを使用して)、次の3つのフェーズで処理されます。
まず、前述のアルゴリズムに従ってストリームが復号化されます。
次に、拡張クラス(私が提供しているAPIに対してサードパーティによって作成されたもの)は、ファイルの一部を読み取ります。読み取られる量は予測できません。特に、ファイルのヘッダーに含まれることが保証されているわけではありませんが、XMLの任意の時点で発生する可能性があります。
最後に、別の拡張クラス(同じ取引)が入力XMLを1..nサブセットドキュメントに分割します。これらは、2番目の操作で処理されるドキュメントの部分と一部重複する可能性があります。つまり、このオブジェクトを処理するために使用しているメカニズムを巻き戻す必要があると思います。
これが私の質問です:
データ全体を一度にメモリに読み込まずにこれを行う方法はありますか?明らかに、入力ストリームフィルターとして復号化を実装できますが、私が説明している方法でXMLを解析できるかどうかはわかりません。2番目のステップの情報を収集するために必要なドキュメントの多くをウォークオーバーし、次にドキュメントを巻き戻して再度渡すことでジョブに分割します。理想的には、後で使用されなくなったドキュメントのすべての部分を解放します。それらは渡されました。