我如何XML序列化同步的ArrayList?

时间:2012-11-02 21:02:59

标签: serialization synchronization xml-serialization java

当我尝试使用ArrayListCollections.synchronizedListbeans.XMLEncoder中包含的beans.XMLDecoder进行序列化和反序列化时,出现以下错误:

java.lang.reflect.InvocationTargetException  
Continuing ...  
java.lang.Exception: XMLEncoder: discarding statement XMLEncoder.writeObject*Collections$SynchronizedRandomAccessList);  
Continuing ... 

由于我正在处理的程序是一个多线程音乐库客户端/服务器应用程序,我需要同步。如果使用普通的ArrayList,序列化/反序列化工作正常。我真的不想使用Vector,因为它包含很多遗留操作。

以下是我序列化和反序列化的方法:

/**  
* Serializes library into an XML file  
* @param xmlFileLocation - location of XML file  
*/ 

public void saveLibrary (String xmlFileLocation) {  
    FileOutputStream fos;  
    try {  
        fos = new FileOutputStream(xmlFileLocation);  
        XMLEncoder encoder = new XMLEncoder(fos);  
        encoder.writeObject(lib);  
        encoder.close();  
        fos.close();  
    } catch (Exception e) {  
    e.printStackTrace();  
    }  
} 

/**  
* Constructor for Library, deserializes XML file  
* @param xmlFileLocation - location of XML file  
*/ 
@SuppressWarnings("unchecked")  
public Library(String xmlFileLocation) {  
    FileInputStream fis;  
    try {  
        fis = new FileInputStream(xmlFileLocation);  
        XMLDecoder decoder = new XMLDecoder(fis);  
        Object o = decoder.readObject();  
        if (o instanceof List)    
            setLib((List<MusicDescription>) o);   
            decoder.close();  
            fis.close();  
    } catch (Exception e) {  
        e.printStackTrace();  
    }     
} 

正如我所说,我真的不想使用Vector,因为它包含许多遗留操作。

0 个答案:

没有答案