我对serialVersionUID感到困惑,有人告诉我,如果我没有定义serialVersionUID它会影响性能,所以我需要总结一下我对此的了解
从我的理解,在Java编译器中如果需要在2个类之间进行通信,或者需要使用1个任务到1个任务之间的对象通信。当发送方发送对象时,应该在发送方和接收方中生成serialVersionUID,将serialVersionUID放入对象然后接收验证对象,如果正确的接收方将继续进程,如果不是它将抛出异常
所以如果我没有放入serialVersionUID,那么java编译器将根据我的理解在运行时定义它,所以我认为它不会影响Java执行时的性能
我希望我的理解应该是正确的如果不是请帮助本网站的其他人建议
谢谢
答案 0 :(得分:3)
这些细节的答案总是可以在规范中找到。
如果可序列化类没有显式声明serialVersionUID,则序列化运行时将根据类的各个方面计算该类的默认serialVersionUID值,如Java(TM)对象序列化规范中所述。
有关更多信息,请访问java.io.Serializable。
答案是它会但真正的问题是多少?
这个问题的答案可以在本文Into the mist of serialization myths中找到。
结论是影响不是那么相关,但代码管理的成本可能更高。因为这类问题的最终答案总是取决于项目规模和应用程序运行的环境。
答案 1 :(得分:0)
首先应该生成/添加serialVersionID到实现Serializable
接口的类,并且它在对象的解除分类时有所帮助。因此,您不必担心可能的性能问题,但绝对应该考虑为您的Serializable类提供serizalVersioItd。
在this thread中,您可以阅读有关serialVersionID的目的。
答案 2 :(得分:0)
所以如果我没有放入serialVersionUID,那么java编译器将根据我的理解在运行时定义它,所以我认为它不会影响Java执行时的性能
这句话没有意义。编译器在运行时无法执行任何操作。如果省略它, JVM 将在任何特定ObjectInputStream
或ObjectOutputStream
首次使用该类时计算它。
开销不大。