2009-08-25 9 views
0

Zur Zeit serialisieren wir das Sitzungsobjekt des Benutzers in die Datenbank, aber das Objekt hat sich in letzter Zeit zu stark verändert, daher beschließen wir, diesen Prozess neu zu gestalten. Wir sind uns alle einig, dass wir das ganze Objekt nicht serialisieren können und es Feld für Feld speichern müssen. Es gibt 2 Vorschläge,Java-Serialisierung: readFields/putFields vs. serialisierte Karte

  1. Speichern Sie alle Felder in einer Karte und serialisieren Sie die Karte.
  2. Verwenden Sie ObjectOutputStream.putFields().

Wir sehen keinen großen Unterschied zwischen diesen beiden Ansätzen. Die Nummer 1 verwendet eine vertraute Kartenschnittstelle und ist für jeden einfacher zu verwenden. Die # 2 bietet die bequemen Methoden wie fields.get("confirmed", false) usw.

Wir neigen dazu, mit # 1 zu gehen. Wer kennt noch andere Vorteile von # 2?

Antwort

1

readFields und putFields haben den Vorteil, dass Sie mit der Standard-Serialisierung beginnen können, und fügen Sie das Muster nur bei Bedarf hinzu.

Eine Map wird kleinere Streams erzeugen, wenn sie einmal verwendet wird, aber ein Stream, der viele dieser Objekte speichert, wird kleiner sein, wenn readFields/putFields verwendet wird. Dies liegt daran, dass es einen einmaligen Overhead gibt, der das Format des Streams beschreibt.

Hinweis sollten Sie immer defaultReadObject/readFields zu Beginn der readObject und defaultWriteObject/putFields zu Beginn des writeObject nennen. Leider wird dies nicht überprüft.

0

Nach this Website, können Sie anpassen, wie die Werte gelesen und geschrieben von zwei write (Object) und readObject- (Object) in der Klasse mit dem Namen private Methoden implementieren. Überprüfen Sie die Sitzung "Anpassen des Standardprotokolls" auf der obigen Website. Dies ist wahrscheinlich die bevorzugte Methode und, wenn ich mich richtig erinnere, ist auch die empfohlene Methode im Effektiven Java-Buch beschrieben.

Indem Sie so vorgehen, behalten Sie die Logik bei, welche Felder in der Klasse, die die Felder enthält, gelesen/geschrieben werden sollten, was eine bessere Kapselung darstellt.