【问题标题】:Serialization : InvalidClassException scala序列化:InvalidClassException scala
【发布时间】:2013-01-21 12:30:04
【问题描述】:

为什么会出现这个错误?

Serialization Problem 
  java.io.InvalidClassException: scala.reflect.ClassTypeManifest; 
  local class incompatible: stream classdesc serialVersionUID =

使用智能

【问题讨论】:

  • 多一点上下文也无妨。

标签: scala serialization serialversionuid


【解决方案1】:

让我猜猜:您将包含ClassManifestClassTypeManifest 是其子类型)的类(通过 java 的内置序列化)序列化为文件(或数据库),然后升级您的 scala 版本,然后现在正在尝试反序列化该文件,对吗? 或者您正在将一个序列化对象从一个 JVM 进程发送到另一个进程,并且它们运行不同版本的 scala。

好吧,不要这样做。 第一个原因是ClassTypeManifest 没有明确声明serialVersionUID 字段(请参阅What is a serialVersionUID and why should I use it?),这清楚地表明对类的任何更改都可能会更改序列化格式。在ClassTypeManifest 的序列化流中,您不能真正期望任何向后兼容性。 此外,在 scala 2.10 中,ClassManifest 甚至不再是一个类:它只是 ClassTag 的别名,这是一个明显不同的类。

所以说真的,不要指望能够序列化(使用 java 的序列化)ClassManifest 并用另一个版本的 scala 读回它。

如果您确实需要使用 java 反射,您可以尝试将 ClassManifest 字段替换为 java.lang.Class 字段(序列化/反序列化始终是安全的)。

否则,您可以考虑使用其他序列化库。

【讨论】:

  • 为什么SO有学者、学生等奖章却没有通灵奖章?
【解决方案2】:

我解决了这个问题。解决方案是使用 Maven 生命周期清理,然后安装。

【讨论】:

    猜你喜欢
    • 2015-03-20
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 2012-12-25
    • 2019-10-05
    相关资源
    最近更新 更多