我有一个自定义类(下面的构造函数),我似乎无法序列化。
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);
}
}
我最好选择将所有内容都设为字符串以便序列化,然后将字符串转换回反序列化后我实际需要的字符串吗?
答案 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)。