ree*_*olt 8 serialization scala serialversionuid remote-actors
我目前正在测试远程演员在Android和Windows之间进行通信.Actors远程发送不同的类,我设置serialVersionUID.
这是我的序列化类的代码:
@SerialVersionUID(13.asInstanceOf[Long]) case class IdentifyMessage(userName : String, user : User, code : Int)
Run Code Online (Sandbox Code Playgroud)
问题是远程actor调试说不兼容的类存在问题:
caught java.io.InvalidClassException: scala.actors.remote.Node; local class incompatible:
stream classdesc serialVersionUID = -6610463074147725500, local class serialVersionUID = -7525549079045563153
Run Code Online (Sandbox Code Playgroud)
为什么我的SerialVersionUID对编译器无关紧要?
如何修复serialVersionUID?或者可能还有另一个问题?
谢谢
由于某种原因,使用长版本的 13、13l 效果更好:
@SerialVersionUID(13l) case class IdentifyMessage(userName : String, user : User, code : Int)
Run Code Online (Sandbox Code Playgroud)
在 REPL 中测试:
java.io.ObjectStreamClass.lookup(IdentifyMessage("hei", User(), 8).getClass).getSerialVersionUID()
Run Code Online (Sandbox Code Playgroud)
更新
我还尝试将其作为程序运行;像这样:
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)
}
Run Code Online (Sandbox Code Playgroud)
...并得到:
#1 6829060442504540290
#2 13
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3749 次 |
| 最近记录: |