我在几个地方读到StreamingMarkupBuilder比MarkupBuilder更适合编写大型XML文档。但是,我一直无法找到明确答案的原因。
有人可以解释为什么StreamingMarkupBuilder比MarkupBuilder更好地编写大型文档吗?
答案 0 :(得分:1)
正如我所看到的,主要区别在于带有Identation的开销。当流编写器生成单行输出时,MarkupBuilder会制作很多动作来制作prettyPrinted xml字符串。
我认为,您可以提供IndentPrinter,从而最大限度地减少开销。
有同样的问题here,但答案不太明确。
通过名称,我应该建议,Streaming将直接在流中写入数据,而Not-Streaming版本 - 在内存文档结构中累积。但是在StreamingMB和Ordinary MB的来源中,我找不到核心差异,可以说,MB存储了不必要的数据。
所以,我认为,缩进只是瓶颈。
答案 1 :(得分:1)
根据我的理解,streamingMarkupBuilder与MarkupBuilder有点像SAX与DOM:第二个在内存中加载文档的完整结构,第一个在文档到来时处理文档,在需要时加载文件位置,因为它被加载。
其他图像可能正在使用迭代器而不是使用整个列表。
希望有所帮助