2011-06-09 72 views
1

並非所有項目都需要數據庫。 我目前正在使用的項目不希望任何數據庫被使用。相反,它應該使用對象序列化來存檔。 該實現會將大量對象序列化/反序列化爲文件。 我的問題在於,什麼是對象序列化文件的最佳做法?對象序列化到文件的最佳做法

+0

我會將數據寫入文本,例如XML或JSon,因此您可以編輯數據並透明地處理數據結構中的微小變化。 – 2011-06-09 14:07:13

+2

您是否只需要一次訪問所有對象或對特定對象的任何隨機訪問? – 2011-06-09 14:10:16

+0

也應該支持對特定對象的隨機訪問。 – YoK 2011-06-09 14:16:41

回答

3

它很大程度上取決於數據的性質,您將要寫入磁盤的類會有多大變化,無論您是需要存儲該類的數據還是其數據和代碼,以及它是否意圖成爲人類可讀。

Object serialization to a file是一種技術。另一個將您的對象模型翻譯爲結構化文本記錄(CSV,XML等)。通常,如果文件中引用的對象必須相互引用,則需要將引用編碼爲與該文件相關的ID號,並在解碼器重新載入對象時重建引用。

如果您確實需要控制對存儲進行編組的方式,您可以通過Externalizable接口對其進行詳細控制。當心,一旦你承擔了所有的責任,你將需要正確處理它。

至於最佳實踐去:

  1. 創建的文件編號爲每個對象實例。
  2. 在序列化中對對象的類型進行編碼(這是在默認序列化方案中爲您完成的)。
  3. 添加一個額外的字段來跟蹤類的修訂,因爲將「舊」對象加載到它們類的較新版本中可能會有問題。
  4. 提供一個可以「轉發」的層,將一個已知修訂的磁盤對象上的「舊」轉換爲當前類修訂。
3

我會建議協議緩衝區,但現在我建議MessagePack

1

我建議你看看XStream

這是一個將對象序列化爲XML並返回的簡單庫。