我们正在使用Xamarin + IKVM来编译iOS平台的java代码。将前面序列化的数据反序列化为文件时,我得到ClassCastException:
.lang.ClassCastException at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1943) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1850) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:361) at com.kiwi.animaltown.UserAssetRenderer.deSerialize(UserAssetRenderer.java:2072)
以下是我要序列化的课程:
public class TestSerializeClass implements Serializable
{
/**
*
*/
private static final long serialVersionUID = -1218312212872650919L;
public int leftNonTransparentX = -1;
public TestSerializeClass()
{
}
}
序列化:
obOut = new ObjectOutputStream(bufferOutStream);
for(int x = 10; x < 20; x = x+1) {
TestSerializeClass obj = new TestSerializeClass();
obOut.writeObject(obj);
}
反序列化:
inStr = AssetConfig.assetStorage.getFileHandle(fileName).read();
BufferedInputStream buffStr = new BufferedInputStream(inStr, 8*1024);
ObjectInputStream in = new ObjectInputStream(buffStr);
try {
Object obj;
while (true) {
obj = (TestSerializeClass)in.readObject();
}
catch...
答案 0 :(得分:0)
我意识到我已经迟到了,坦率地说,我现在已经触及IKVM近十年了,但我确实记得当时在序列化过程中遇到了类加载问题。
我们采取的措施不是深入挖掘问题,而是依靠第三方序列化库。我们最终对XStream很满意。如今,我建议使用便携式序列化解决方案(例如,在JSON或MessagePack之上工作的东西)。这样,如果某些事情无法解决,您可以获得更多自由度 - 您可以将序列化子系统换成特定于平台的实现。