Java >> Java tutorial >  >> Tag >> java.io

hvordan løses java.io.InvalidClassException:lokal klasse inkompatibel:stream classdesc serialVersionUID

Definer et medlem i den pågældende klasse:

private static final long serialVersionUID = 1113799434508676095L;

Dette løser problemet beskrevet i meddelelsen ved at tvinge serialVersionUID af den lokale klasse for at matche det, der blev lagt i strømmen, da du serialiserede den gamle version af klassen, som ville være blevet beregnet automatisk over forskellige klasseattributter, hvis ingen serialVersionUUD felt var til stede på det tidspunkt.

Det er muligt, at du har ændret klassen på en inkompatibel måde, som så vil producere en anden undtagelse. Se kapitlet Specifikation for objektserialisering om versionering for detaljer. Men blot tilføjelse eller fjernelse af et felt har ikke den effekt.


Du kan implementere private void readObject(ObjectInputStream in) i din objektklasse. Det "tilsidesætter" på en måde standardadfærden, selvom den er erklæret som "privat", så teknisk set burde den ikke. Dybest set, når java serializer skal læse et objekt fra en strøm, af klasse, der har denne metode implementeret, vil den kalde det i stedet for at gøre dets standardting.

Så du kan implementere en logik i den, som læser alle de eksisterende felter fra strømmen og tildeler standardværdier til dem, der mangler.

Rediger: Som @EJP påpeger (tak, @EJP!), virker dette ikke helt. Du skal også definere private static long serialVersionUID i din klasse, og indstil den til den "gamle" værdi, du ser i undtagelsen.

Overvej også at erstatte Serializable med Externalizable for fremtiden, det giver dig noget mere fleksibilitet og gennemsigtighed. Udvider Externalizable fortæller java, at du har til hensigt at håndtere serialisering selv, og den vil så ikke forsøge at gøre sin standardting, der kaster undtagelsen.

I så fald skal du implementere readExternal(ObjectInputStream in) at læse medlemmer fra strømmen én efter én, og initialisere dem, der mangler, til en form for standard.


Java tag