java VTD-解析器逻辑
java VTD-Parser Logic
我在 java 中实现了 VTD-Parser,它成功地轻松解析了 XML 大约 500 MB 的文件,并且能够写入 excel。
我理解 DOM 解析器首先创建一个树节点结构,然后获取数据,而 SAX 是一个基于事件的解析器。但是是什么让 VTD 解析文件如此简单高效呢?
我试着搜索,我得到了很多实现的例子,但从来没有得到逻辑。我尝试了下面的 link 来理解这个想法,但没有得到清晰的画面。
VTD_Parser
如果有人能解释一下这个简短的想法。
根据主题上的 Wikipedia page,VTD-XML(XML 的虚拟令牌描述符)使用非提取式解析,这意味着它不会从将文档转换为一些基于内存的数据结构,而是构建一个包含指向原始文档的指针(以偏移量和长度的形式)的数据结构。这种处理显然是内存效率最高的,但我认为这是以性能为代价的,因为在请求数据时不可避免地进行了 IO 操作(但缓存在这里可以提供很多帮助)。
在我看来,当输入非常大而请求的数据非常小(数据挖掘场景的一种)时,这种处理最有用
我在 java 中实现了 VTD-Parser,它成功地轻松解析了 XML 大约 500 MB 的文件,并且能够写入 excel。 我理解 DOM 解析器首先创建一个树节点结构,然后获取数据,而 SAX 是一个基于事件的解析器。但是是什么让 VTD 解析文件如此简单高效呢? 我试着搜索,我得到了很多实现的例子,但从来没有得到逻辑。我尝试了下面的 link 来理解这个想法,但没有得到清晰的画面。 VTD_Parser
如果有人能解释一下这个简短的想法。
根据主题上的 Wikipedia page,VTD-XML(XML 的虚拟令牌描述符)使用非提取式解析,这意味着它不会从将文档转换为一些基于内存的数据结构,而是构建一个包含指向原始文档的指针(以偏移量和长度的形式)的数据结构。这种处理显然是内存效率最高的,但我认为这是以性能为代价的,因为在请求数据时不可避免地进行了 IO 操作(但缓存在这里可以提供很多帮助)。
在我看来,当输入非常大而请求的数据非常小(数据挖掘场景的一种)时,这种处理最有用