この質問は関連するGoogle検索で高いままであるため、別の回答を追加します-aalto-xml 0.9.7(2011年3月)には非同期XMLペーシングがあります。これにより、ドキュメントの任意のサイズのチャンクを渡して解析を続行できEVENT_INCOMPLETE
、入力バッファーが使い果たされてドキュメントが不完全なままであることを示す新しいStaXイベントタイプが可能になります。
これはTatuSalorant(作者)の例です:
byte[] msg = "<html>Very <b>simple</b> input document!</html>".getBytes();
AsyncXMLStreamReader asyncReader = new InputFactoryImpl().createAsyncXMLStreamReader();
final AsyncInputFeeder feeder = asyncReader.getInputFeeder();
int inputPtr = 0; // as we feed byte at a time
int type = 0;
do {
// May need to feed multiple "segments"
while ((type = asyncReader.next()) == AsyncXMLStreamReader.EVENT_INCOMPLETE) {
feeder.feedInput(msg, inputPtr++, 1);
if (inputPtr >= msg.length) { // to indicate end-of-content (important for error handling)
feeder.endOfInput();
}
}
// and once we have full event, we just dump out event type (for now)
System.out.println("Got event of type: "+type);
// could also just copy event as is, using Stax, or do any other normal non-blocking handling:
// xmlStreamWriter.copyEventFromReader(asyncReader, false);
} while (type != AsyncXMLStreamReader.END_DOCUMENT);