Почему StreamingMarkupBuilder работает лучше, чем MarkupBuilder для написания больших документов
Я читал в нескольких местах, что StreamingMarkupBuilder лучше подходит для написания больших XML-документов, чем MarkupBuilder. Тем не менее, я не смог найти окончательного ответа на вопрос, почему это так.
Может кто-нибудь объяснить, почему StreamingMarkupBuilder работает лучше для написания больших документов, чем MarkupBuilder?
2 ответа
В моем понимании, streamingMarkupBuilder и MarkupBuilder немного похожи на SAX против DOM: второй загружает всю структуру документа в память, где первый обрабатывает документ, как он есть, загружая текущее положение, когда это необходимо, так как загружен.
Другое изображение может использовать итераторы, а не весь список.
Надеюсь, поможет
Как я вижу, основное отличие заключается в накладных расходах с идентификацией. MarkupBuilder делает много действий, чтобы создать красивую XML-строку prettyPrinted, когда потоковая запись производит вывод в одну строку.
Как я думаю, вы можете предоставить свой IndentPrinter и минимизировать накладные расходы.
Здесь есть тот же вопрос, но он не слишком ясно ответил.
По названию, я должен предложить, что Streaming будет записывать данные непосредственно в поток, а версия Not-Streaming - накапливать структуру документа в памяти. Но в источнике StreamingMB и обычного MB я не могу найти принципиальную разницу, которая может сказать, что MB хранит ненужные данные.
Так что, я думаю, отступ - это только узкое место.