serialVersionUID有什么用?

09-08-08 banq

如果你使用一个带有serialVersionUID类序列化保存到文件或传输到网络另外一端,那么下次你读取反序列化时,必须使用同样的serialVersionUID号类,尽管这两次都是同一个类,如果serialVersionUID不同,将无法读取或反序列化。报错如下:

Exception in thread "main" java.io.InvalidClassException:

SerializeMe; local class incompatible: stream classdesc

serialVersionUID = 1, local class serialVersionUID = 2

所以,使用serialVersionUID达到一种安全控制。如果你保存了一个类内容到文件或网络上,下次不喜欢被别人读取,只要改serialVersionUID这个值,那么就没有人能够读取它,当然如果你自己忘记当初serialVersionUID值,你也没法读取了,这就是一种加密功能。

所以,在编写类代码,使用特定serialVersionUID值是推荐做法。

还有,你不要给每个类加一个serialVersionUID值后,就不管它,这样这些类读取过时旧数据时,将不会报错,最好的办法是:当你改变类的结构时,把serialVersionUID也改变一下。

What is serialVersionUID?

http://www.javablogging.com/what-is-serialversionuid/

    

1

猜你喜欢