Direkt in ein Objekt deserialisieren

  • Themenstarter Themenstarter Gast_Michael
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Gast_Michael

Gast
Hallo,

ich möchte ein Objekt schreiben, das sich in ein ByteArray serialisieren und aus einem ByteArray heraus wieder deserialisieren kann. Das serialisisieren ist mit ObjectOutputStream kein Problem.

Das deserialisieren bereitet mir Probleme. Die Methode readObject liefert mir ein neues Objekt zurück. Ich möchte aber ein bereits vorhandenes Objekt mit den Daten aus dem ByteArray belegen, also etwas in der Art wie:

Code:
public void restore(byte[] data) throws PriamosRuntimeException {
 ByteArrayInputStream bais = new ByteArrayInputStream(data);
 ObjectInputStream ois = new ObjectInputStream(bais);
 ois.readObject(this);
}

Jemand ne Idee?

Gruß Michael
 
hmm... könnte schwierig werden - weil dir der nun normalerweise ein neues Objekt erstellt, mit dem du dann arbeiten kannst... - schöner wär's also, wenn du dein bisheriges Objekt mit diesem neuen überschreiben könntest...

ansonsten, wenn du weißt, welches Objekt das ist und das auch immer gleich ist, schreib dir nen wrapper, der alle Werte des Objekts ausliest und in dein aktuelles mit set-Methoden befüllt...
Wenn du nicht an alle Attribute kommst (private, final), musst du mit Reflection hantieren.
 
Nee, ist nicht immer der selbe Datentyp, das soll die Basisklasse für ein Objekt werden, das über das Netzwerk verschickt werden kann. Von dieser Klasse werden weitere abgeleitet, die entsprechend mehr Members enthalten können.

Es wäre ja möglich, dass ich mir das Objekt temporär von readObject erstellen lasse und dann über Reflections alle Members in mein this übertrage. Das ist aber eine richtig dreckige Arbeit. Ich hatte gehofft, dass es da schon was fertiges gäbe. Bin auch nicht auf die Standardserialisierung festgelegt, wenn hier jemand ne andere Lib kennt, die das macht, ist das auch OK.

Gruß Michael
 
Überschreibe die readResolve-Methode
Code:
protected Object readResolve() throws java.io.ObjectStreamException
 
Anonymous hat gesagt.:
Überschreibe die readResolve-Methode
Code:
protected Object readResolve() throws java.io.ObjectStreamException

Prinzipiell ein guter Ansatz, aber ich kam nicht so recht weiter, da diese Methode nicht nur für das "Hauptobjekt" aufgerufen wird, sondern für alle im Stream enthaltenen Objekte.

Letztlich habe ich jetzt doch eine Clone-Methode erstellt, die über Reflections alle Members aus dem einen Objekt ins andere kopiert. War nicht so aufwendig.

Gruß Michael
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben