【发布时间】:2018-03-27 08:30:30
【问题描述】:
在我用 Kotlin 语言编写的 Android 应用程序中,我遇到了通过 Socket 传递自定义序列化类的问题。据我设法解决的问题是在我的 TakeKeyUserEvent 类中传递的 GregorianCalendar 类中。当我不在课堂上传递 GregorianCalendar 对象时,问题不再存在。
客户:
val event = TakeKeyUserEvnet(u,r,date)
val s: Socket = Socket(IP,PORT)
val out: ObjectOutputStream = ObjectOutputStream(s.getOutputStream())
out.writeObject(event)
out.flush()
out.close()
服务器:
thread(start = true) {
val ss: ServerSocket = ServerSocket(PORT)
while(true){
clientSocket = ss.accept()
val input = ObjectInputStream(clientSocket.getInputStream())
val event: UserEvent = input.readObject() as UserEvent //error happens here
readMessage(event)
}
}
TakeKeyUserEvent 类:
class TakeKeyUserEvent(val user: User, val room: Room, val date: GregorianCalendar): UserEvent() { //Works perfectly without GregorianCalendar class
companion object {
@JvmStatic private val serialVersionUID: Long = 7571062817744602394L
}
}
UserEvent 类:
abstract class UserEvent: Serializable {
companion object {
@JvmStatic
private val serialVersionUID: Long = 7571062817744602394L
}
}
错误:
java.io.InvalidClassException: libcore.util.ZoneInfo; Incompatible class (SUID): libcore.util.ZoneInfo: static final long serialVersionUID =-4598738130123921552L; but expected libcore.util.ZoneInfo: static final long serialVersionUID =5684813000093210627L;
我尝试创建自己的 GregorianCalendar 类,该类继承自原始类并设置我的 serialVersionUID,但它没有帮助。我会感谢任何帮助。
【问题讨论】:
标签: java android kotlin client-server gregorian-calendar