Nochmal serialisieren...

fireblade1282

Mitglied
Nochmal eine kurze Frage...
ich habe in meinem Objekt, das Serializable ist ein Objekt, was es nicht ist.
Damit keine Exception geworfen wird, habe ich es als transient deklariert.
Jetzt möchte ich kurz bevor serialisiert wird ein Attribut dieses als transient markierten Objektes aber noch schnell auslesen in einen "buffer" legen bevor der serialisier mechanismus greift...
dazu kann ich prinzipiell eine methode bereithalten die immer kurz vor dem serailisieren aufgerufen werden müsste.. aber das geht doch bestimmt auch eleganter...
z.B. kann ich doch bestimmt irgendeine interne methode redefinieren, und den code da erweitern .... oder?
 
achso... und natürlich will ich da auch wissen, wo das pendant dazu hinkommt:
ich deserialisiere das objekt... das transiente objekt ist dann ja null und ich will es neu anlegen..? je mehr ich drüber nachdenke, desto sicherer bin ich, dass auch das marker interface bestimmt doch irgendwo methoden zum überschreiben hat....
 
Hallo!

Implemente statt Serializable einfach java.io.Externalizable und implementiere dort die Methoden:
void readExternal(ObjectInput in)
The object implements the readExternal method to restore its contents by calling the methods of DataInput for primitive types and readObject for objects, strings and arrays.
void writeExternal(ObjectOutput out)
The object implements the writeExternal method to save its contents by calling the methods of DataOutput for its primitive values or calling the writeObject method of ObjectOutput for objects, strings, and arrays.

...oder du implementierst doch nur Serializable und implementierst die Methode:
ANY-ACCESS-MODIFIER Object writeReplace() throws ObjectStreamException;
Diese Methode wird vor der Serialisierung aufgerufen. Dort kannst du wieder ein neues Objekt deiner Klasse erzeugen (und zurückgeben) , welches die entsprechenden Felder gesetzt hat.

Näheres findet man jeweils in der Java API Doc


Gruß Tom
 
Danke für die Antwort...
Das ist halt etwas merkwürdig.. wie kann der Serialisierung Mechanismus denn diese Methode aufrufen, wenn er doch gar nicht weiss dass ich sie anbiete? gibt es da eine leere implementation im interface .. also so wie die Adapterklassen für gewöhnlich laufen? und wenn ja... lege ich nicht code lahm, wenn ich das überschreibe - oder ist es standardmässig leer?
Sorry für die vielen fragen :) ?
 
Hallo!

Das ist halt etwas merkwürdig.. wie kann der Serialisierung Mechanismus denn diese Methode aufrufen, wenn er doch gar nicht weiss dass ich sie anbiete?
Mit Magie ;-) ... im Prinzip verwendet der Java Serialisierungsmechanismus Reflection ... so kann er auch das Vorhandensein der writeReplace() Methode prüfen und dann entsprechend diese verwenden.

lege ich nicht code lahm, wenn ich das überschreibe - oder ist es standardmässig leer
Der Code ist standardmäßig nicht implementiert.

Gruß Tom
 
Zurück