Java 中的 Sax Stax 块处理

Sax Stax Chunks Processing in Java

提问人:TryingToCode 提问时间:11/9/2018 最后编辑:TryingToCode 更新时间:11/9/2018 访问量:164

问:

提到它的 Stax 和 Sax 解析器字符方法在文档中返回数据块,但我收到内存不足,任何人都可以解释一下吗?如果可能的话,举个例子,我正在尝试读取一个 Xml,该 Xml 在一个 xml 标签之间具有大量内容。

<x>......too long data...</x>

看看我是否可以覆盖这个或我可以设置的一些属性?我发现我们可以在最新版本中设置 CDATA_CHUNK_SIZE = “jdk.xml.cdataChunkSize”,但这对我来说不是一个选择。

在 Stax 解析器中:“处理器可以在单个块中返回所有连续的字符数据,也可以将其拆分为多个块。

在 SAX 解析器中:characters 方法 "

字符(char[] ch, int start, int length)

接收字符数据的通知。

解析器将调用此方法来报告每个字符数据块。SAX 解析器可以在单个块中返回所有连续的字符数据,也可以将其拆分为多个块;但是,任何单个事件中的所有字符都必须来自同一个外部实体,以便定位器提供有用的信息。 "

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at com.sun.org.apache.xerces.internal.util.XMLStringBuffer.append(XMLStringBuffer.java:208)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanData(XMLEntityScanner.java:1370)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanCDATASection(XMLDocumentFragmentScannerImpl.java:1654)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3020)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117)
    at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:558)
    at com.javacodegeeks.StAXParserDemo.main(StAXParserDemo.java:65)
XML 解析 内存不足的 SAX Stax

评论

0赞 Hakanai 11/9/2018
“SAX 解析器可能会在单个块中返回所有连续的字符数据”——显然,如果发生这种情况,它将耗尽足够大块的内存。
0赞 TryingToCode 11/9/2018
我可以设置任何属性来限制它吗?
0赞 Hakanai 11/12/2018
不确定。通常的答案是选择一个不同的解析器,但也许 xerces 有一个。我不知道。我使用 woodstox,但我也不知道哪种行为在我的脑海中浮现。
0赞 TryingToCode 11/13/2018
谢谢,我已经发现 Apache Xerces2 正在分块进行

答: 暂无答案