Serialized version compatibility

xiaoxiao2021-03-06  15

Package tigers;

Import java.io. *;

public class Tiger5 {static class Inner implements Serializable {private String name; public Inner (String name) {this.name = name;} public String toString () {return "Tiger5 $ Inner :(" name ")";} // public void todo () {}} private static void writeObject (Inner in) throws IOException {ObjectOutputStream oos = new ObjectOutputStream (new FileOutputStream ( "Tiger5 $ Inner.tmp")); oos.writeObject (in);} private static Inner readObject () throws IOException, ClassNotFoundException {ObjectInputStream ois = new ObjectInputStream (new FileInputStream ( "Tiger5 $ Inner.tmp")); return (Inner) ois.readObject ();} public static void main (String [] args) { Inner IN = New Inner ("Inner"); try {writeObject (in); // IN = readObject (); system.out.println (in);} catch (exception e) {E.PrintStackTrace ();}} }

result:

The old version of the Inner object is serialized into the Tiger5 $ Inner.TMP file.

Now add a simple non-private TODO () method in Inner:

Public void Todo () {}

And modify the main () method is as follows in order to use the new version INNER class to reverse sequencing:

Try {// writeObject (in); in = readObject (); system.out.println (in);} catch (exception e) {E.PrintStackTrace ();}

result:

java.io.InvalidClassException: tigers.Tiger5 $ Inner; local class incompatible: stream classdesc serialVersionUID = 925364839964073665, local class serialVersionUID = 2692111289122516972 at java.io.ObjectStreamClass.initNonProxy (ObjectStreamClass.java:519) at java.io.ObjectInputStream.readNonProxyDesc (ObjectInputStream.java:1546) at java.io.ObjectInputStream.readClassDesc (ObjectInputStream.java:1460) at java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1693) at java.io.ObjectInputStream.readObject0 (ObjectInputStream.java: 1299) at java.io.ObjectInputStream.readObject (ObjectInputStream.java:339) at tigers.Tiger5.readObject (Tiger5.java:34) at tigers.Tiger5.main (Tiger5.java:40) is now added to version control in the Inner Field:

Private static final long serialversionuid = 0;

Then press the above steps to serialize the old version INNER object, and read with the new version Inner object and find it can be successfully read.

转载请注明原文地址:https://www.9cbs.com/read-46515.html

New Post(0)