gpt4 book ai didi

scala 类序列化,无法修复 SerialVersionUID

转载 作者:行者123 更新时间:2023-12-04 08:37:44 24 4
gpt4 key购买 nike

我目前正在测试远程参与者以在 Android 和 Windows 之间进行通信。 Actors 远程发送不同的类,我在其中设置了 serialVersionUID。

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

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

问题是远程参与者调试说不兼容的类有问题:
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, 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

关于scala 类序列化,无法修复 SerialVersionUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6451874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com