【问题标题】:xstream serialize heap spacexstream 序列化堆空间
【发布时间】:2012-04-22 14:16:06
【问题描述】:

我正在使用 xstream 将对象序列化为 xml 作为文件。我要序列化的对象非常大,由一个非常复杂的树结构组成。为此,我使用以下代码:

    XStream xStream = new XStream();

    xStream.omitField(Stat.class, "sources");
    String XMLFilename = "XML-" + dateString + ".xml";

    FileOutputStream outputStream = null;

    Writer writer = null;

    try {
        outputStream = new FileOutputStream(currentWorkPath+XMLFilename);
        writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8"));
        xStream.toXML(ss, writer);

    } catch (Exception exp) {
        log.error(null, exp);
    } finally {
        writer = null;
        outputStream = null;
    }

代码运行良好,但是在序列化非常大的对象时出现内存不足错误 java 堆空间。有什么方法可以防止这种情况吗?随着对象的增长,是否可以动态构建 xml?

或者可能是其他一些 xml 序列化库?

例外:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.HashMap.addEntry(Unknown Source)
    at java.util.HashMap.put(Unknown Source)
    at com.thoughtworks.xstream.core.util.ObjectIdDictionary.associateId(ObjectIdDictionary.java:91)

谢谢, 詹姆斯·福特

【问题讨论】:

  • 它应该在导航要序列化的对象时写入对象。在重复引用的情况下,它需要记录结构中的每个对象,但除非您有非常多的对象,否则这应该不重要。我怀疑你能做的最简单的事情就是增加最大堆大小。
  • 我们需要一个 XML 示例和相关的 java 文件...

标签: java xml xstream filewriter


【解决方案1】:

类路径上是否有 Xpp3 库(例如服务器上)?类路径上没有 Xpp3(或其他类似库)的 Java 5 和更低版本上的 XStream 使用 DOM 驱动程序。没有任何例子我只能这样怀疑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-21
    • 2012-02-25
    • 2010-12-16
    • 1970-01-01
    • 2013-04-02
    • 2014-10-25
    • 1970-01-01
    相关资源
    最近更新 更多