2009-09-30 11 views
6

Ich suche nach dem Format, das Java zum Serialisieren von Objekten verwendet. Die Standardserialisierung serialisiert das Objekt in einem Binärformat. Insbesondere bin ich neugierig zu wissen, ob zwei Läufe eines Programms das gleiche Objekt unterschiedlich serialisieren können.Javas Darstellung serialisierter Objekte

Welche Bedingung sollte ein Objekt erfüllen, damit das Objekt sein Verhalten unter dem Standard-Serialisierungs-/Deserialisierungs-Umlauf von Java beibehält?

Antwort

0

Ich mag @Stephen C Beispiel von Object.hashCode(). Wenn solche nichtdeterministischen Hash-Codes serialisiert werden, dann werden die Hash-Codes bei der Deserialisierung nutzlos sein. Wenn wir beispielsweise eine HashMap serialisieren, die auf Object.hashCode() basiert, verhält sich ihre deserialisierte Version anders als die ursprüngliche Map. Das heißt, das gleiche Objekt nachzuschicken würde uns in den zwei Karten unterschiedliche Ergebnisse liefern.

+0

Ändern Sie Ihre ursprüngliche Frage, nicht erneut in einer Antwort nach StackOverflow Richtlinien. – Peter

+0

Sicher. Ich habe meine Frage gestellt. Es ist eigentlich eine Neuformulierung der ursprünglichen Frage. – reprogrammer

2

Wenn Sie zwei Objekte mit allen Eigenschaften auf identische Werte festgelegt haben, werden sie auf die gleiche Weise serialisiert.

Wenn es nicht wiederholbar wäre, dann wäre es nicht sinnvoll!

+0

@Kieveli: nicht wahr. Betrachten Sie den Fall von HashSet- und HashMap-Datenstrukturen. –

1

Sie werden es immer auf die gleiche Weise serialisieren. Wenn dies nicht der Fall wäre, gäbe es keine Garantie dafür, dass ein anderes Programm die Daten korrekt serialisieren könnte, wodurch der Zweck der Serialisierung vereitelt würde.

+0

Gibt es Informationen, die sich über verschiedene Programmausführungen hinweg ändern können, z. B. Objektspeicheradressen? – reprogrammer

+0

Nein. Es ist soweit ich weiß eine reine Darstellung des Objekts und seiner Werte; die notwendigen Daten, um das Objekt neu zu deserialisieren und sonst nichts. – Peter

+2

Es gibt keinen Grund, warum eine Serialisierung desselben Objekts zweimal die gleiche Bytefolge erzeugen muss. Zum Beispiel könnten sie mit verschiedenen Schlüsseln verschlüsselt werden. Solange der Schlüssel dem Objekt in dem serialisierten Datenstrom vorangeht und der Verschlüsselungsalgorithmus bekannt war, könnte jedes andere Programm den Strom leicht entschlüsseln und das ursprüngliche Objekt neu erstellen. Es gibt keinen Grund zu der Annahme, dass Java-Serialisierung dies tut, aber es ist denkbar. – Alohci

-2

Ich bin auf der Suche nach dem Format, das Java verwendet, um Objekte zu serialisieren.

Nicht zu krank sein, es schreibt sie irgendwie. Wie genau das ist und sollte von Ihnen bestimmt werden. A Character maps to .... uh, es wird involviert, aber anstatt das Rad neu zu erfinden, lasst uns fragen, was genau du haben musst, um ein Objekt in welchem ​​Zustand zu rekonstruieren?

Die Standard-Serialisierung serialisiert das Objekt in einem binären Format.

Also? (Wiederum nicht als albernen Versuch - klingt wie wir ein Problem definieren, müssen die Daten concepted möglicherweise nicht haben)

Ich bin neugierig, ob zwei Läufe eines Programm kann das gleiche Objekt serialisiert anders .

Wenn Sie einen Stream mit Informationen hatten, wie würden Sie feststellen, in welchem ​​Status das Objekt wiederhergestellt werden muss?

1

Wenn Sie denselben Singlethread-Algorithmus mit denselben Daten ausführen, führt dies normalerweise zum gleichen Ergebnis.

Aber Dinge wie die Reihenfolge, mit der ein HashSet Einträge serialisiert, ist nicht garantiert. Tatsächlich kann ein Objekt bei der Serialisierung geringfügig verändert werden.