2009-08-25 83 views
0

當前,我們將用戶的會話對象序列化到數據庫中,但對象最近變化太多,因此我們決定重新設計此過程。我們都同意我們不能序列化整個對象,我們需要逐場保存它。有2項建議,Java序列化:readFields/putFields與序列化映射

  1. 商店所有領域的地圖和序列化映射。
  2. 使用ObjectOutputStream.putFields()

我們沒有看到這兩種方法之間的很大區別。 #1使用熟悉的地圖界面,每個人都可以輕鬆使用。 #2提供了方便的方法,如fields.get("confirmed", false)

我們傾向於去#1。任何人都知道#2的其他好處嗎?

回答

1

readFieldsputFields有,你可以開始使用默認的序列,只有當你需要它添加樣板的優勢。

如果使用一次,Map將產生更小的流,但如果使用readFields/putFields,存儲大量這些對象的流將會更小。這是因爲描述流格式的一次開銷。

注意,你必須撥打defaultReadObject/readFieldsreadObjectdefaultWriteObject/putFieldswriteObject開始啓動。不幸的是,這沒有檢查。

0

根據this網站,您可以通過在您的類中實現兩個名爲writeObject(ObjectOutputStream)和readObject(ObjectInputStream)的私有方法來自定義值的讀寫方式。檢查上述網站上的會話「自定義默認協議」。這可能是首選方法,如果我沒有記錯的話,它也是有效Java書中描述的推薦方法。

通過這樣做,您可以維護應該在包含字段的類中讀取/寫入哪些字段的邏輯,這是更好的封裝。