2017-05-31 72 views
0

我正在从事涉及读取和写入xml文件的gradle项目。我在尝试使用XMLStreamWriter将一个非常长的字符串转义字符写入文件时遇到了一个问题。该字符串最终需要大约半小时才能写入文件,并导致我的应用程序停止响应。当我调用该方法时出现问题:XMLStreamWriter - 将长字符串写入xml编写器的问题

writer.writeAttribute(key, escapedXML) 

奇怪的是我已经将gradle项目导入到eclipse和intellij中;当我在eclipse中运行应用程序并运行使用gradle创建的可执行jar时,问题就出现了,但是当我在intellij中运行该程序时,它会很快完成而不会出现任何问题。除了build.gradle文件中包含的依赖项之外,我还没有添加任何附加的jar文件。我试图找到两个IDE之间的依赖关系或设置的差异,但我一直未能找到任何东西。我也证实了两个IDE都使用了相同的JRE。我也试着用分配给应用程序的更多内存来运行jar,但这没有帮助。我确信我错过了一些明显的东西,我非常感谢一些帮助。请让我知道,如果你能告诉我失踪。

更新:花了几天的时间看着这个没有运气。我使用intellij来创建一个可执行的jar文件,但也存在这个问题。我还在eclipse和intellij中运行时查看了应用程序的类路径。在intellij中运行时,路径包含jdk1.8.0_121 \ lib中的几个jar文件,但在eclipse中运行时不包含这些jar文件。然后,我复制了intellij类路径,并运行指定了该类路径的jar。仍然没有运气。我希望我提供了足够的细节来激发一些想法。任何建议将不胜感激。

+0

缓冲写入应该已被使用,控制台输出/日志记录可能会以不同的行为变慢。 java'-Xmx = ... m'的内存选项也许。 –

+0

我使用BufferOutputStream创建XMLStreamWriter。另外我试过改变虚拟机参数来调整内存选项,但它没有帮助 – DarthRitis

+0

也许xalan与xerces XML分析器/写入器的东西。实际的XML解析器使用接口和java SPI(服务提供者接口)进行选择。而这两者最为突出。您可以使用调试器或java SPI调用来检查是否使用了不同的XML库。 –

回答

0

我想出了问题的原因。很显然,intellij在eclipse没有的时候自动将我的XMLStreamWriter的编码设置为UTF-8。我改变了这种

XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(outStream); 

这个

XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(outStream, "UTF-8"); 

,我的问题得到解决。