Scala反序列化:找不到类
我试图理解在尝试序列化/反序列化非常简单的数据结构时发生的以下问题:
case class SimpleClass(i: Int) object SerializationDebug { def main(args: Array[String]) { val c = SimpleClass(0) val l1 = List(c) serializationSaveToFile("test",l1) val l2 = serializationLoadFromFile("test") // .asInstanceOf ... } def serializationSaveToFile(fn: String,o: Any) { val fos = new FileOutputStream(fn) val oos = new ObjectOutputStream(fos) oos.writeObject(o) oos.close() } def serializationLoadFromFile(fn: String): Any = { val fis = new FileInputStream(fn) val ois = new ObjectInputStream(fis) return ois.readObject() } } 在尝试运行此代码时,我在反序列化步骤中获得了java.lang.ClassNotFoundException:SimpleClass.我目前的调查结果如下: >当我通过某种内置类型交换SimpleClass时,该示例有效,即我可以反复排序List [Int]或List [(Int,Double)]而没有问题.将内置类型与我的SimpleClass混合(即具有List [Any])会再次引发异常. 如果重要:我的Scala版本是2.10.0; JDK是1.7.0. 这里发生了什么?这应该是失败还是某种错误?我手边的实际问题涉及更复杂的数据结构(大量嵌套;内置类和自有类的混合).任何以最小侵入式简单方式序列化/反序列化此数据结构的建议(即无需查找容器类及其类型参数的工作组合)也是受欢迎的! 解决方法
这个解决方案适合我:
val ois = new ObjectInputStream(new FileInputStream(fileName)) { override def resolveClass(desc: java.io.ObjectStreamClass): Class[_] = { try { Class.forName(desc.getName,false,getClass.getClassLoader) } catch { case ex: ClassNotFoundException => super.resolveClass(desc) } } } 当然,在编写对象时,我们使用相同的方式: val ois = new ObjectOutputStream(new FileOutputStream(path)) ois.writeObject(myobject) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |