Java - Modifying serialVersionUID of binary serialized object

前端 未结 4 697
感情败类
感情败类 2021-01-07 08:37

A few months back I serialized a java.io.Serializable object into a file. Now I need to read the contents, but since then the serialVersionUID has changed, and now I\'m get

相关标签:
4条回答
  • 2021-01-07 08:43

    As a hack, you can generate the serialVer your jvm is probably using using the serialver tool:

    serialver -classpath whatever com.foo.bar.MyClass

    If you then manually set the serialVerUID in your class it ought to match and you ought to be able to load, assuming you haven't changed the class in such a way as to invalidate.

    0 讨论(0)
  • 2021-01-07 08:47

    Why not modify the serialVersionUID in your current version instead as described in the Serialization documentation?

    0 讨论(0)
  • 2021-01-07 08:47

    It is documented that Serialization is not intended to be used for persisting data. In order to get that data back, you will need to downgrade your version of the JVM to the version that was used to output that data.

    For future reference, don't use serialization to persist data between sessions of the JVM.

    0 讨论(0)
  • 2021-01-07 08:56

    I recently found myself in a similar situation--I had some serialized objects that I had to read, the serialVersionUID of those objects was different than the newest version and, in my case, there were a couple of different serialVersionUIDs stored in the file for the same class (stored at different times, obviously). So I didn't have the luxury of modifying the class and setting its serialVersionUID; I actually had to go in and modify the stored data.

    What I figured out (by reading the java.io source code) is that an object gets serialized by first storing the class name (using writeUTF()) and then immediately after using writeLong() to save the serialVersionUID.

    My solution was to catch the exception then go back, look for the class name, and immediately after the class name replace the old serialVersionUID with the new.

    0 讨论(0)
提交回复
热议问题