2011-04-16 75 views
1

任何人都可以建議哪種方式更好? 以序列化形式存儲對象或將filecontent讀爲String並構造對象。序列化與字符串格式

簡單地說,
1.我在我的文件存儲中有這樣的字符串(str,str1,str2,str3,....)。 讀取此文件字符串並構造java對象(例如,基於逗號分隔創建Linkedlist obj)。

2.使用序列化從文件存儲中檢索鏈接列表obj。

從文件存儲讀取序列化對象或從字符串構造obj。 哪一個是最好的方法?

我參考這裏的鏈接列表僅供參考。 它可能是不同的,從字符串我必須構造一些JSONObject,JsonArray格式... JSON不是序列化的obj,我會做一些其他的方式,使序列化。

對於一個最好的冗長字符串,序列化或構造字符串的obj?

所有的事情都與Java有關

請諮詢我

問候
S.Chinna

回答

2

使用文本格式的好處是,你可以閱讀和簡單的維護數據文本編輯器。

使用像對象序列化這樣的二進制格式的優點是您不必擔心分隔符,例如如果哪一個字符串包含,

無論哪種方法,你認爲可能是足夠有效的(雖然我會使用ArrayList)

編輯:如果你有多個字符串一個更好的辦法可能是把它們放在一個分隔線。這樣你就不用擔心,,並且可以更容易地讀取/編輯/版本文件。

List<String> list = FileUtils.readLines(file); 

正如你所看到的,你將能夠在一行中讀取整個文件。

+3

此外,在文本格式的文件可以被所有的版本控制系統版本,所以你可以存放東西如源代碼庫中的測試用例,並隨時記錄對它​​們的更改。二進制序列化的對象不可能是有效地進行版本控制(如,你不僅能夠存儲,但檢查的差異)的任何版本控制系統! – 2011-04-16 08:42:16

0

這取決於你必須存儲的對象的複雜性。如果它們很簡單,或者如果您有時間爲您的對象編寫自己的Writer和Reader,我總是會使用自定義文本格式,因爲它們是最容易調試的。

如果您有一臺理解文本命令的服務器,您甚至可以使用putty或telnet連接並測試您的服務器!

但是,如果你必須運輸複雜的對象結構,甚至可能在開發過程中改變,我肯定會採用某種形式的序列化。請注意,這裏默認的序列化不是通信協議的好選擇,因爲它們在重複定義類時會產生大量開銷。如果您希望某些API可以與類中的Java構建兼容,那麼最好使用JBossSerialization;如果您不必傳輸很多二進制數據,則可以使用JSON。

0

的Java ObjectStream系列化的優點是:

  • 你必須最少的代碼編寫,和最小的思維設計你的序列化格式時做。
  • 與對象的複雜(圖結構)網絡處理是簡單的。
  • 最終的結果應該是類型安全的(假設你沒有實現自己的自定義讀/寫對象的方法等)無缺陷的

的Java序列化ObjectStream的主要缺點是它面對你已經序列化的類的變化是脆弱的。處理這可能是困難的。 (相比之下,手工解析文本格式在很大程度上是不受這個問題......和問題比較容易解決。)