我们有一个将大型 XML 文件的内容输出到 System.out 的过程。
当这个输出打印得很漂亮(即:多行)时,一切正常。但是当它在一条线上时,Eclipse 会因 OutOfMemory 错误而崩溃。任何想法如何防止这种情况?
我们有一个将大型 XML 文件的内容输出到 System.out 的过程。
当这个输出打印得很漂亮(即:多行)时,一切正常。但是当它在一条线上时,Eclipse 会因 OutOfMemory 错误而崩溃。任何想法如何防止这种情况?
听起来像是控制台面板爆炸了。考虑限制其缓冲区大小。
编辑:它在首选项中。搜索控制台。
如何将其打印在一行上?
在第二种情况下,你需要更多的内存......
如果您想要更多的 Eclipse 内存,可以尝试通过更改 eclipse.ini 中的 -Xmx 值来增加 Eclipse 内存
我将假设您正在构建一个org.w3c.Document
,并使用序列化程序编写它。如果您正在手工构建 XML 字符串,则几乎可以保证生成的东西几乎是 XML 的,但我强烈建议您先修复它。
也就是说,如果您要从序列化程序写入流(并且 System.out 是流),那么您应该直接写入流而不是写入字符串并打印它(您可以使用字符串编写器)。这样做的原因是 XML 序列化器将正确处理字符编码,而序列化器到 String 到流可能不会。
如果您当前没有构建 DOM,并且担心这样做的内存要求,那么我建议查看 Practical XML 库(我维护),特别是构建器包。它使用轻量级节点,然后使用 SAX 转换通过序列化程序输出。
编辑以回应评论:
好的,您已经使用 XStream 覆盖了序列化程序。接下来我将假设您正在调用XStream.toXML(Object)
以生成字符串,并建议您调用 varianttoXML(Object, OutputStream)
并将其传递给实际输出。这样做的原因是 XML 对字符编码非常敏感,这在将字符串转换为流时经常会中断。
当然,这可能会导致构建 POST 请求时出现问题,尤其是当您使用的库不提供 OutputStream 时。