java自定义类不可序列化

时间:2012-12-26 22:39:02

标签: java class serialization deserialization

我有一个自定义类(下面的构造函数),我似乎无法序列化。

public ObjectNode(String name, int crackLevel,ArrayList<ObjectNode> filesOnComputer)

每次我尝试从对象节点的ArrayList序列化此类的对象时,我都会遇到类强制转换异常。 ArrayList无法强制转换为ObjectNode

Code-Global Vars:

    ArrayList<ObjectNode>a=new ArrayList<ObjectNode>();
File file = new File("/mnt/sdcard/","cheesepuff.txt");

相关守则:

        public void serializeFile()
{       
    a.add(new ObjectNode("Level 1 Waterwall","ww1", 1, 5));
    try { 
        Log.i("AAA","before serialize: "+a.toString());
        FileOutputStream fos = new FileOutputStream(file); 
        ObjectOutputStream oos = new ObjectOutputStream(fos); 
        oos.writeObject(a); 
        oos.flush(); 
        oos.close(); 
        Log.i("AAA","finished serialize");
        } 
        catch(Exception e) { 
        Log.i("aaa","Exception during serialization: " + e); 
        System.exit(0); 
        } 
}

public void deserializeFile()
{
    try { 
        FileInputStream fis = new FileInputStream(file); 
        ObjectInputStream ois = new ObjectInputStream(fis); 
        ObjectNode obj=(ObjectNode)ois.readObject();
        Log.i("aaa","obj: "+obj.ts());
        //a.add((ObjectNode) ois.readObject()); 
        ois.close(); 
        Log.i("aaa","after serialize: " + a); 
        } 
        catch(Exception e) { 
        Log.i("aaa","Exception during deserialization: " + 
        e); 
        System.exit(0); 
        } 
        }

我最好选择将所有内容都设为字符串以便序列化,然后将字符串转换回反序列化后我实际需要的字符串吗?

2 个答案:

答案 0 :(得分:2)

您正在序列化a ArrayList<ObjectNode>

oos.writeObject(a); 

反序列化时,您会完全回复,但是您尝试将其存储为ObjectNode

ObjectNode obj=(ObjectNode)ois.readObject();

你应该做

ArrayList<ObjectNode> obj = (ArrayList<ObjectNode>)ois.readObject();

更新:或者,正如PeterLawrey所说,

List<ObjectNode> obj = (List<ObjectNode>) ois.readObject;

(可能那时你必须将a重新定义为List<ObjectNode>,但这是另一件好事。)

答案 1 :(得分:2)

您正在编写一个ArrayList,这意味着您在阅读时必须将其强制转换为ArrayList(或者更好的是List)。