Насколько я помню (и это было какое-то время ...), XmlMtomReader делает минимальный объем внутренней памяти, требуемый, в зависимости от порядка, в котором части MIME появляются во входном потоке. (Стандарт MTOM позволяет им появляться в любом порядке).
Так что, если ваш входной поток, например:
- Двоичная часть 1
- Затем основная часть XML, например,
... двоичная часть 1 ... ... двоичная часть 2 ...
Вот что происходит:
- Чтобы начать читать XML (элемент "a"), он должен хранить двоичную часть 1 внутри
- Когда вы читаете содержимое элемента "b", оно приходит из внутреннего хранилища
- Когда вы начинаете читать элемент "c", он хранит остальную часть XML внутри (элемент "d") и продвигает поток к двоичной части 2. Когда вы читаете содержимое элемента "c" в этот момент, оно приходит прямо из потока, а не из хранилища.
- Когда вы в последний раз читаете элемент "d", XML приходит из внутреннего хранилища