SAX解析器:public void characters(char ch [],int start,int length)。值“开始”增加太多

时间:2013-10-13 16:33:18

标签: xml int character sax increment

SAX解析器具有此方法

characters(char ch[], int start, int length)

根据我的理解,获取标签内的String。我意识到,当SAX解析器继续在大型XML文件上运行时, int start 变得越来越大,以至于它超过了max int值。

我打印了开始,它似乎随机跳数。数字如何确定?

谢谢

1 个答案:

答案 0 :(得分:2)

通常,SAX解析器将一次读取一个缓冲区数据。在给定点,缓冲区可能包含类似

的内容
="a" foo="bar"><b x="1">some text</b></a><c

现在,当解析器报告此缓冲区中的文本节点时,它可能会调用ContentHander,提供包含整个缓冲区的char []数组,start = 24 length = 9。或者如果它更喜欢,它可能提供与一系列调用相同的数据。如果文本节点碰巧跨越两个缓冲区,如下所示:

="a" foo="bar"><b x="1">some 
 text</b></a>

然后第一个调用可能为第一个缓冲区提供start = 24 length = 4,第二个调用将为第二个缓冲区提供start = 0 length = 5。

这个想法是解析器不必承担将数据移出原始缓冲区并将其组装成连续字符串的成本。理论上,这会带来性能上的好处;实际上,大多数SAX应用程序都希望将文本节点的内容收集到一个连续的字符串中,因此复制成本只需移动到应用程序中。

你真的不应该关心start和length的值是什么,或者在这些边界之外的char []数组中是什么。只需将这些边界内的数据复制到StringBuilder即可。