SAX解析器是基于事件驱动的流式XML解析工具,边读边触发startElement()等回调,内存占用恒定且与文件大小无关,适合处理大型XML;DOM则需构建完整节点树,内存用量达文件大小2~5倍,适用于需随机访问和修改的小型XML。
SAX解析器是一种基于事件驱动的流式XML解析工具,它不把整个文件装进内存,而是边读边触发回调,比如startElement()、characters()、endElement(),开发者在这些回调里处理数据。处理大型XML时,它和DOM的核心差异就落在“要不要建一棵树”上。
DOM必须一次性加载全部内容,构建完整的节点树,每个元素、属性、文本都变成内存里的对象,还带着父子引用、命名空间信息等开销。一个500MB的XML,DOM可能吃掉2GB以上内存。SAX只保留当前解析位置的少量上下文(比如元素栈、字符缓冲区),峰值内存通常稳定在几MB以内。
OutOfMemoryError,SAX一般不受影响DOM像打开一本纸质书——可以随时翻到任意页、划重点、涂改、插页。SAX则像听广播——声音过去了就
没了,不能倒带,也不能跳到中间某段。
不是技术高低之分,而是任务匹配问题。选错会导致开发绕弯或系统崩溃。
基本上就这些。不复杂但容易忽略:文件一超20MB,就该本能地先想SAX。