IKVMC,MONO:反序列化时ClassCastException

时间:2014-08-25 12:40:46

标签: java serialization xamarin ikvm

我们正在使用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...

1 个答案:

答案 0 :(得分:0)

我意识到我已经迟到了,坦率地说,我现在已经触及IKVM近十年了,但我确实记得当时在序列化过程中遇到了类加载问题。

我们采取的措施不是深入挖掘问题,而是依靠第三方序列化库。我们最终对XStream很满意。如今,我建议使用便携式序列化解决方案(例如,在JSON或MessagePack之上工作的东西)。这样,如果某些事情无法解决,您可以获得更多自由度 - 您可以将序列化子系统换成特定于平台的实现。