加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala类序列化,无法修复SerialVersionUID

发布时间:2020-12-16 19:13:25 所属栏目:安全 来源:网络整理
导读:我目前正在测试远程演员在 Android和Windows之间进行通信. Actors远程发送不同的类,我设置serialVersionUID. 这是我的序列化类的代码: @SerialVersionUID(13.asInstanceOf[Long]) case class IdentifyMessage(userName : String,user : User,code : Int) 问
我目前正在测试远程演员在 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?或者可能还有另一个问题?

谢谢

解决方法

由于某种原因使用长版13,13l,效果更好:

@SerialVersionUID(13l) case class IdentifyMessage(userName : String,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,code: Int)
  println("#1 " + java.io.ObjectStreamClass.lookup(IdentifyMessage1("hei",8).getClass).getSerialVersionUID)
  println("#2 " + java.io.ObjectStreamClass.lookup(IdentifyMessage2("hei",8).getClass).getSerialVersionUID)
}

……得到了:

#1 6829060442504540290
#2 13

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读