Мы используем Xamarin + IKVM для компиляции нашего java-кода для платформы iOS. Я получаю 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...
Я понимаю, что опаздываю на вечеринку, и, честно говоря, я почти не касался IKVM почти десять лет назад, но в то время я помню, что при загрузке сериализации возникали проблемы с загрузкой.
Вместо того, чтобы копаться, то, что мы сделали, чтобы обойти эту проблему, полагалось на стороннюю библиотеку сериализации. Мы оказались довольны XStream. В настоящее время я бы предложил использовать портативное решение для сериализации (например, что-то, что работает поверх JSON или MessagePack). Таким образом, у вас больше степеней свободы, если что-то не сработает - вы можете просто заменить подсистему сериализации на конкретную платформу.
in
in.readObject()
из кода десериализации?