编码&解码方法所在的类中的序列化XML

时间:2012-04-28 11:00:09

标签: java xml-serialization

我想不出一种描述它的方式,基本上我想知道是否有可能编写一个方法使当前对象成为解码的序列化XML。

我知道saveTillXML有效,因为它生成的XML文件与当前Till对象的状态相匹配[但实际上我不知道它确实有效,因为解码失败]。但是,当我调用loadTillXML()方法时,我得到了这些异常:

  • java.lang.reflect.InvocationTargetException
  • java.lang.IllegalStateException
  • java.lang.ArrayIndexOutOfBoundsException

当窗口关闭时我调用saveTillXML()方法,& Till的构造函数中的loadTillXML方法。

我有所有的获得和集& Till中的无争议构造函数,&在Till使用的所有条款中。

public void saveTillXML() throws IOException{
    XMLEncoder encoder=new XMLEncoder(new BufferedOutputStream(new FileOutputStream("till.xml")));
    encoder.writeObject(this);
    encoder.close();        
}

public static void loadTillXML() throws IOException{
    XMLDecoder decoder=new XMLDecoder(new BufferedInputStream(new FileInputStream("till.xml")));
    decoder.readObject();       
    decoder.close();
}

我唯一能想到的是decoder.readObject()没有进入任何事情的事实,如果我想让当前实例成为它正在解码的XML,这可能是应该的。

提前致谢。

1 个答案:

答案 0 :(得分:0)

好的,我已经设法解决了我的问题。 loadTillXML需要一个返回方法--Till - 然后促使我认为它需要在Till之外调用。所以我使用它而不是窗口中的private Till till=new Till();

工作方法:

public static Till loadTillXML() {
    try{
        XMLDecoder decoder=new XMLDecoder(new BufferedInputStream(new FileInputStream("till.xml")));
        return (Till) decoder.readObject();     
    }
    catch(FileNotFoundException fNFE){
        System.out.println("Cannot find file");
        Till till=new Till();
        return till;
    }
}