Внутренне ли XmlMtomReader кэширует двоичные данные из входного потока? - PullRequest
1 голос
/ 01 октября 2009

На самом деле я хотел бы знать, читает ли XmlMtomReader бинарные части mime из входного потока напрямую? Или он хранит их внутри перед вызовом метода ReadContentAsBase64 ()?

1 Ответ

1 голос
/ 01 октября 2009

Насколько я помню (и это было какое-то время ...), XmlMtomReader делает минимальный объем внутренней памяти, требуемый, в зависимости от порядка, в котором части MIME появляются во входном потоке. (Стандарт MTOM позволяет им появляться в любом порядке).

Так что, если ваш входной поток, например:

  • Двоичная часть 1
  • Затем основная часть XML, например,

... двоичная часть 1 ... ... двоичная часть 2 ...

  • Тогда Двоичная часть 2

Вот что происходит:

  • Чтобы начать читать XML (элемент "a"), он должен хранить двоичную часть 1 внутри
  • Когда вы читаете содержимое элемента "b", оно приходит из внутреннего хранилища
  • Когда вы начинаете читать элемент "c", он хранит остальную часть XML внутри (элемент "d") и продвигает поток к двоичной части 2. Когда вы читаете содержимое элемента "c" в этот момент, оно приходит прямо из потока, а не из хранилища.
  • Когда вы в последний раз читаете элемент "d", XML приходит из внутреннего хранилища
...