gpt4 book ai didi

java自定义类不可序列化

转载 作者:行者123 更新时间:2023-12-01 18:55:51 25 4
gpt4 key购买 nike

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

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

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

代码-全局变量:

    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);
}
}

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

最佳答案

您正在序列化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> ,但这是另一件好事)。

关于java自定义类不可序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14047133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com