scala类序列化,无法修复SerialVersionUID

时间:2011-06-23 09:21:37

标签: scala serialization serialversionuid remote-actors

我目前正在测试远程演员在Android和Windows之间进行通信。 Actors远程发送不同的类,我设置了serialVersionUID。

这是我的序列化类的代码:

@SerialVersionUID(13.asInstanceOf[Long]) case class IdentifyMessage(userName : String, user : User, code : Int)

问题是远程actor调试说不兼容的类存在问题:

caught java.io.InvalidClassException: scala.actors.remote.Node; local class incompatible: 
stream classdesc serialVersionUID = -6610463074147725500, local class serialVersionUID = -7525549079045563153

为什么我的SerialVersionUID对编译器无关紧要?

如何修复serialVersionUID?或者还有另一个问题?

感谢

1 个答案:

答案 0 :(得分:4)

出于某些原因,使用13,13l的长版本可以更好地工作:

@SerialVersionUID(13l) case class IdentifyMessage(userName : String, user : User, code : Int)

用REPL测试:

java.io.ObjectStreamClass.lookup(IdentifyMessage("hei", User(), 8).getClass).getSerialVersionUID()

<强>更新

我也尝试将其作为程序运行;像这样:

object SerialTest extends App {
  case class User()
  @SerialVersionUID(13.asInstanceOf[Long]) case class IdentifyMessage1(userName: String, user: User, code: Int)
  @SerialVersionUID(13l) case class IdentifyMessage2(userName: String, user: User, code: Int)
  println("#1 " + java.io.ObjectStreamClass.lookup(IdentifyMessage1("hei", User(), 8).getClass).getSerialVersionUID)
  println("#2 " + java.io.ObjectStreamClass.lookup(IdentifyMessage2("hei", User(), 8).getClass).getSerialVersionUID)
}

......得到了:

#1 6829060442504540290
#2 13