生成xml

时间:2018-08-20 23:32:32

标签: out-of-memory xstream

我有一个定义用于存储应用程序配置数据的类。我想将此实例保存到xml并为此使用XStream。但是当我尝试编写一个实例时,我总是遇到内存不足的错误。

这是我的班级定义:

public class Eol_Target_Variable {
    String name;
    String alias;
    long value;
    long default_val;
    int size;
    int scaling;
    int div;
    Boolean read_access;
    Boolean write_access;


    public Eol_Target_Variable(String arg_name, String arg_alias, int arg_value, int arg_size, int arg_scaling,int arg_div)
    {
        name = arg_name;
        alias = arg_alias;
        value = arg_value;
        default_val = 0;
        scaling = arg_scaling;
        div = arg_div;
        size = arg_size;
        read_access = true;
        write_access = true;
    }
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }


    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

...等,用于所有标准的吸气剂和吸气剂

这是我的将单个对象导出到xml的处理程序

public void importConfiguration() {
    XStream xstream = new XStream(new DomDriver());
    Eol_Target_Variable myvar = new Eol_Target_Variable("jamie", "xtracold", 1977, 16, 1, 1);
    String myxml = xstream.toXML(myvar);
    System.out.print(myxml);
}

每次我都抛出“线程“ JavaFX应用程序线程”中的异常” java.lang.OutOfMemoryError:Java堆空间”。我不明白为什么这样一个简单的类会抛出内存不足错误。我设法使用XStream输出了简单的String对象,因此该库正在运行,正是这个自定义类似乎引起了问题。

我还尝试使用VM参数-Xms512m -Xmx1024m增加启动时分配的堆,但这没什么区别。

谢谢 杰米

1 个答案:

答案 0 :(得分:0)

这是新的类声明

@XStreamAlias("targetVar")
public class Eol_Target_Variable {
    String name;
    String alias;
    long value;
    @XStreamAlias("default")
    long default_val;
    int size;
    int scaling;
    int div;
    @XStreamOmitField
    Node node;
    @XStreamOmitField
    Boolean read_access;
    @XStreamOmitField
    Boolean write_access;


public Eol_Target_Variable(String arg_name, String arg_alias, int arg_value, int arg_size, int arg_scaling,int arg_div,  Node arg_node)
{
    name = arg_name;
    alias = arg_alias;
    value = arg_value;
    default_val = 0;
    scaling = arg_scaling;
    div = arg_div;
    size = arg_size;
    node = arg_node;
    read_access = true;
    write_access = true;
}

我还使用了另一个解析器,因为基本的DOMParser从未处理过大量数据。当我改用StaxDriver时,由于XStream遍历整个场景图,因此至少能够在调试输出中看到文本流。

XStream xstream = new XStream(new StaxDriver());
xstream.processAnnotations(Eol_Target_Variable.class);

我不假装完全理解为什么声明内联类会导致问题,但是我可以推理为什么要求XStream解析完整的Node会导致问题。

如果有人对XStream和复杂的数据结构有任何经验,这些经验在JavaFX应用程序中声明,我将欢迎他们的输入。