Java Deserialisierung von java.lang.Integer - Ausnahme
Erhalten Sie die folgende Ausnahme bei der Deserialisierung eines HashMap<String, Integer>
:
java.io.InvalidClassException: java.lang.Integer; local class incompatible: stream classdesc serialVersionUID = 1360826667802527544, local class serialVersionUID = 1360826667806852920
Serialisiert und deserialisiert werden auf der gleichen Maschine mit der gleichen JRE. JDK 1.6.0_12
- Könnten Sie bitte post die serailization und Deserialisierung-code ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom Blick auf die JDK-source, 1360826667806852920 ist die richtige
serialVersionUID
fürInteger
. Ich war nicht in der Lage zu finden alle Klassen in der JDK mit derserialVersionUID
1360826667802527544.Interessanterweise, auf der Suche nach 1360826667802527544 auf Google aufgetaucht, ein paar andere Leute mit diesem problem, insbesondere dieser thread auf Sonne Foren. Das problem war, dass die person war die Speicherung von bytes in einem String, und die serialisierten Daten war immer entstellt. Da Sie immer die gleichen
serialVersionUID
scheint es sehr wahrscheinlich, dass Sie in einem ähnlichen problem.Nie speichern bytes in einem
String
. Verwenden Sie ein byte-array oder einem Kurs zu halten, bytes, chars nicht.Dass sollte nicht passieren. Beachten Sie, dass die IDs unterscheiden sich nur in den letzten Ziffern, der zweite ist der, den ich in meinem JDK-Quellen.
Meine Vermutung ist, dass die serialisierten stream hab irgendwie beschädigt.
überprüfen Sie die Quelle code für Integer, hier ist, was ich für Integer in mehreren Versionen von java:
Also ich würde sagen das problem kommt aus einer Klasse von dir was du geändert zwischen Serialisierung und Deserialisierung und das hat keinen bestimmten serialVersionUID...
Vielleicht sollten Sie an dieser, gleiche problem, die Beschreibung und es sieht aus wie falsch Serialisierung /Deserialisierung-code....
Ich Stand vor dem gleichen Problem und es ist, weil, wenn wir versuchen zu speichern Integer-Objekt in einen String mit der Zeichenkodierung ist immer versaut und während der Deserialisierung die serialVersionUID Lesen, ist falsch. Das ist die Ursache dieses Fehlers.
Um diesen Fehler zu vermeiden verwenden Sie Base64 Codierung vor dem speichern, um String.
Lesen Sie diese Antwort und das problem gelöst für mich.