1

我们有一个将大型 XML 文件的内容输出到 System.out 的过程。

当这个输出打印得很漂亮(即:多行)时,一切正常。但是当它在一条线上时,Eclipse 会因 OutOfMemory 错误而崩溃。任何想法如何防止这种情况?

4

3 回答 3

2

听起来像是控制台面板爆炸了。考虑限制其缓冲区大小。

编辑:它在首选项中。搜索控制台。

于 2009-12-04T16:57:51.353 回答
1

如何将其打印在一行上?

  • 使用几个 System.out.print(String s)
  • 使用 System.out.println(Stringverybigstring)

在第二种情况下,你需要更多的内存......

如果您想要更多的 Eclipse 内存,可以尝试通过更改 eclipse.ini 中的 -Xmx 值来增加 Eclipse 内存

于 2009-12-04T15:22:14.133 回答
1

我将假设您正在构建一个org.w3c.Document,并使用序列化程序编写它。如果您正在手工构建 XML 字符串,则几乎可以保证生成的东西几乎是 XML 的,但我强烈建议您先修复它。

也就是说,如果您要从序列化程序写入流(并且 System.out 是流),那么您应该直接写入流而不是写入字符串并打印它(您可以使用字符串编写器)。这样做的原因是 XML 序列化器将正确处理字符编码,而序列化器到 String 到流可能不会。


如果您当前没有构建 DOM,并且担心这样做的内存要求,那么我建议查看 Practical XML 库(我维护),特别是构建器包。它使用轻量级节点,然后使用 SAX 转换通过序列化程序输出。


编辑以回应评论:

好的,您已经使用 XStream 覆盖了序列化程序。接下来我将假设您正在调用XStream.toXML(Object)以生成字符串,并建议您调用 varianttoXML(Object, OutputStream)并将其传递给实际输出。这样做的原因是 XML 对字符编码非常敏感,这在将字符串转换为流时经常会中断。

当然,这可能会导致构建 POST 请求时出现问题,尤其是当您使用的库不提供 OutputStream 时。

于 2009-12-04T15:50:36.213 回答