Serialisieren eines nicht-serializable in Java?
Wie kann ich ein Objekt serialisieren, die nicht implementiert Serializable? Ich kann nicht markieren Sie es Serializable weil die Klasse wird von einem 3rd-party-Bibliothek.
class SFoo extends com.library.Foo implements Serializable {}
?InformationsquelleAutor Martin08 | 2011-05-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht serialise eine Klasse, die nicht umzusetzen
Serializable
, aber Sie können wickeln Sie es in eine Klasse, die das tut. Um dies zu tun, sollten Sie implementierenreadObject
undwriteObject
auf Ihre wrapper-Klasse, so können Sie serialise seine Objekte in einer benutzerdefinierten Art und Weise.transient
.writeObject
rufen Sie zunächstdefaultWriteObject
auf den stream zu speichern, die nicht-transiente Felder, dann rufen andere Methoden auf serialise die individuellen Eigenschaften Ihrer nicht-serialisable Objekt.readObject
rufen Sie zunächstdefaultReadObject
auf den stream wieder zu Lesen, dass alle nicht-Transienten Felder, dann rufen andere Methoden (entsprechend den Einstellungen, die Sie Hinzugefügt, umwriteObject
) deserialise Ihre nicht-serialisable Objekt.Ich hoffe, das macht Sinn. 🙂
Ja. In der Regel, was retten muss, ist von außen sichtbar Staatliche sowieso, so sollte dies kein problem sein. (Es ist auch nicht anders, von den Zwängen, die auf XML/JSON/YAML Lösung. :-P)
nicht sicher, was Ihre Kugel Punkte 2 und 3 bedeuten könnte, geben Sie bitte ein Beispiel-code (Neuling in der java-Programmierung)
Dies scheint nicht die Frage zu beantworten, da es nicht geben, einen Weg, um zu vermeiden, hinzufügen von 'implements Serializable' für jede Klasse, die muss serialisiert werden.
Sie können nicht direkt serialise eine Klasse nicht Serializable markiert. Ende der Geschichte. Meine Antwort können Sie schreiben eine Serialisierbare wrapper um eine nicht-Serialisierbare Klasse, die bewahrt sein wesentliches Zustand.
InformationsquelleAutor Chris Jester-Young
Wickeln Sie das nicht-serialisierbaren Klasse in einer Klasse von Ihrer eigenen, die
Serializable
. In Ihrer KlassewriteObject
- Methode, tun Sie was immer nötig ist zu serialisieren, die ausreichende Informationen über die nicht-serialisierbaren Objekts, so dass Sie Ihre KlassereadObject
Methode nachvollziehen können.Alternativ Kontaktieren Sie den Entwickler der nicht-serialisierbaren Klasse und sagen Sie ihm, es zu beheben. 🙂
InformationsquelleAutor Steve Emmerson
Wenn Ihre Klasse bereits implementiert das Serializable-interface (für die Serialisierung), alles, was Sie tun müssen, ist, zu erklären, das Feld, das Sie nicht wollen, zu serialisieren mit Transienten:
InformationsquelleAutor rox
Können Sie verwenden, Kryo. Es funktioniert auch auf nicht-serialisierte Klassen, aber Klassen muss registriert aforehand.
InformationsquelleAutor Daniel Jipa
Wenn die Klasse nicht final ist, können Sie Ihre eigene Klasse, die Sie erweitert und implementiert Serializable. Es gibt viele andere Möglichkeiten, um zu serialisieren, die neben der Java-built-in-Mechanismus, obwohl.
McGowan Diesen nicht serialisieren beliebiger Felder der nicht-serialisierbare Basisklasse. Falsche Antwort, nach unten gestimmt.
Vielleicht sollte ich explizit über die Notwendigkeit
readObject
undwriteObject
, aber das sind Probleme, die jeder Zeit ein implements Serializable auf etwas, dessen Eltern nichtObject
. Die Antwort ist wirklich einfach nur unvollständig, sondern als falsch, nicht?das ist eine Unterscheidung ohne einen Unterschied. Es ist unvollständig, und daher falsch. Den Teil Ihres Kommentars beginnend 'aber' falsch als gut.
InformationsquelleAutor Michael McGowan