【发布时间】:2015-04-30 16:52:17
【问题描述】:
我正在覆盖
public void characters(char[] ch,
int start,
int length)
throws SAXException
在解析 XML 文档时。它非常适用于小型 XML 文档(1MB 或更少)。但是,如果 XML 文档为 100MB 或更多),我开始在此函数中获取 java 堆空间不足内存错误。
在做了一些研究here 之后,我意识到上面的字符数组 "ch" 的大小取决于 "startElement()" 和 "endElement()" 之间有多少个字符。
所以我想知道,是否有一种聪明的方法来覆盖“startElement”和“endElement”以返回更小的数据块?
例如,假设我有一个如下所示的 XML 文件:
<element1>
This is a very simple sentence that is not very long.
</element1>
目前“characters()”函数会返回“这是一个非常简单的句子,不是很长。”作为一个块。
但我的问题是,如果 XML 文件看起来像这样:
<element1>
An entire book's worth of content is pasted in this single element. Possibly millions of characters.
</element1>
有没有办法我可以“欺骗” startElement() 和 endElement() 让 characters() 函数返回整本书中的书块?
【问题讨论】:
-
100 MiB 不算多...愿意展示您的代码吗?
-
其实我以为java sax解析器已经默认做到了?
-
你使用的是标准的java解析器,还是第三方实现的?
-
这里的问题不太可能是 SAX 解析器配置,更可能是字符方法实现不充分。 OP 没有展示任何关于如何正确使用字符方法的意识,并且不包括minimal reproducible example。以 OffTopic/no mcve 投票结束。