Вот некоторые подробности о том, как потоковая передача от элемента при разборе
с StAX возможно, используя Woodstox framework.
В этой статье есть хороший обзор .
Из XMLInputFactory мы можем вызвать createXMLStreamReader (java.io.InputStream
поток), используя ServletInputStream. Это возвращает XMLStreamReader2, который
имеет метод getText (Writer w, boolean preserveContents), который возвращает int для
количество записанных байтов. Этот метод должен быть реализован. в
реализация Stax2ReaderImpl есть эта реализация
// // // StAX2, Pass-through text accessors
public int getText(Writer w, boolean preserveContents)
throws IOException, XMLStreamException
{
char[] cbuf = getTextCharacters();
int start = getTextStart();
int len = getTextLength();
if (len > 0) {
w.write(cbuf, start, len);
}
return len;
}
В этом коде нам нужно изменить метод getTextCharacters (), чтобы он
читает из InputStream. В тестах Woodstox TestGetSegmentedText
В методе testSegmentedGetCharacters () мы видим sr.getTextCharacters (offset, buf,
начало, лен) используемый метод. На самом деле Javadoc для множественного аргумента
XMLStreamReader.getTextCharacters () показывает следующую реализацию.
int length = 1024;
char[] myBuffer = new char[ length ];
for ( int sourceStart = 0 ; ; sourceStart += length ) {
int nCopied = stream.getTextCharacters( sourceStart, myBuffer, 0, length );
if (nCopied < length) {
break;
}
}