Sollte ein serialisiertes Java-Objekt immer mit der gleichen Bytefolge dargestellt werden, wird es jedes Mal serialisiert?

8

Zum Beispiel, wenn die Objektinstanz serialisiert wurde (was zu 'byte [] bs1' führte) und dann erneut serialisiert wurde (was zu 'byte [] bs2') führte, sollten 'bs1' und 'bs2' die gleiche Länge haben und enthalten die gleichen Bytes? Wenn nicht, warum nicht?

Um Zweideutigkeiten zu vermeiden, sollte ich sagen, dass die zwei Serialisierungen des gleichen Objekts (nicht zwei 'identische' Objekte - die gleiche Instanz) innerhalb von Millisekunden voneinander im selben Thread auf der gleichen JVM - eine zuvor geschehen Das (veränderbare) Objekt wurde einer Methode übergeben, eine danach.

Beachten Sie, dass das Objekt nicht einmal serialisiert, deserialisiert und dann erneut serialisiert wird - es wird nur zweimal serialisiert. Außerdem ist die Klasse des Objekts überhaupt nicht "schlau"; es ist nur ein einfaches, aggregiertes POJO.

Ich verwende die serialisierten Bytes als Ad-hoc-Test, um zu erkennen, ob das Objekt innerhalb der Methode geändert wurde. Ich sehe jedoch Beispiele, in denen das Objekt seinen Zustand offensichtlich nicht geändert hat - doch ein Byte [] unterscheidet sich von dem anderen.

Ich ging davon aus - und es war nur eine Annahme -, dass sie gleich sein würden. Gibt es einen Grund, warum sie nicht sein könnten?

Nachtrag:

Entschuldigt auch, dass kein Beispielcode den Punkt veranschaulicht. Derzeit ist dies ein kleines Stück Code in einem großen System eingebettet. Ich werde versuchen, bei Bedarf eine kleinere, ausführbare Demonstration zu extrahieren. Ich fragte mich, ob es ein grundlegendes Problem mit meiner Annahme gab, und deshalb, wenn jemand erklären könnte, warum die Annahme falsch ist.

    
Paul 21.06.2013, 17:27
quelle

1 Antwort

5

Es ist möglicherweise nicht immer die exakte gleiche Bytefolge, die durch die Serialisierung erzeugt wird. Zum Beispiel ist die Reihenfolge, in der ein Set seine Elemente serialisiert, nicht garantiert, konstant zu sein, selbst wenn wir über eine einzelne Instanz sprechen.

    
arshajii 21.06.2013, 17:35
quelle

Tags und Links