2009-11-05 60 views
4

假設已知對象的確切類別,什麼是將任意對象轉換爲字符串表示或從其轉換字符串表達式的常用方法?換句話說,我需要實現類似於以下一些方法:接受的練習用於將對象轉換爲Java中的字符串和從中轉換爲字符串?

public interface Converter { 

    /** 
    * Convert this object to its String representation. 
    */ 
    public String asString(Object obj); 

    /** 
    * Take the String representation of an object produced by asString, 
    * and convert it back to an object of the appropriate class. 
    */ 
    public Object asObject(String stringRepresentation, Class clazz); 
} 

理想情況下,解決方案應:

  • 如果可能的話使用對象的內置的toString()功能。因此,converter.asString(new Integer(5))應該返回「5」,並且converter.asObject(「5」,Integer.class)應該返回值爲5的Integer。
  • 生成輸出,儘可能可讀。
  • 處理所有常見的Java數據類型,包括java.util.Date。
  • 允許我爲自己的自定義類插入轉換功能。
  • 合理輕量且高效。

我知道有很多現成的解決方案可以做到這一點(比如Google的協議緩衝區),並且我可以輕鬆地自行實施一次性解決方案。我的問題不是「我該如何解決這個問題」,而是「現有的許多現成解決方案中的哪一個是當前的行業標準?」。

回答

2

我會投票給Json,特別是Gson。它非常好地處理泛型/參數化對象。

或者,您也可以編寫一個通用對象轉換器,它可以在反射的幫助下完成所有需要的轉換,如this example。但是,如果你的「API」規定,該轉換器將被髮布爲終端用戶界面,那麼我只能建議通過例如

public <T extends Object> T asObject(String stringRepresentation, Class<T> clazz); 

,這樣一個沒有按更換

public Object asObject(String stringRepresentation, Class clazz); 

」之後需要施放它。

3

我的問題不是「我該如何解決這個問題」,而是「現有的許多現成的解決方案中的哪一個是當前的行業標準?」。他們的

都沒有成爲事實標準。

你能得到它「默認」 XML serialization mechanism如果你假裝用手把它們寫(當你自動使用他們來說,這是不夠好)

最接近的標準,並且接下來的事情,這BTW吸最接近將用於日常使用,將是JSON到Java,但是,你知道,它不是Java Java

0

我同意奧斯卡,如果你可以容忍大的未壓縮文件大小,XML可能是更好的形式。爲了詳細說明他的回答,根據我的經驗,如果您編寫了一個相當簡單的實用程序類,您可以將對象序列化爲XML,而不需要太多工作。要閱讀它們,我會推薦Apache Digester,它在基於規則的解釋方面做得很好。

如果我關心性能或文件大小,我只會選擇其他文件格式,儘管在大多數情況下我都會更喜歡XML的靈活性。

2

你可以看看svenson庫,它將java對象轉換爲json。它非常快速並使用註釋來引入自定義轉換器。

http://code.google.com/p/svenson/

不久前,我會提出了一個XML序列化,但couchdb玩了幾天後,我成爲新的主... JSON。

2

儘管使用或嘗試實現「toString()」作爲可逆操作很誘人,但「toString()」的目的是生成一個對象的用戶友好且易於理解的表示形式,而此目標常常與包含足夠的狀態信息以真正恢復原始對象不一致。

如果您想要堅持一個對象,使用XML,JSON或二進制序列化可能是最好的方法。 「toString()」函數應報告對象的人性化表示(例如「5」,「(3,0,2)」,「5 + 6i」,「{1,2,3,4,5 ,6}「,」{x => y,z => 3}「等)。即使在可以從生成的字符串中完全恢復對象的情況下,編寫函數來解析每種類型(潛在非結構化)文本的時間也可以通過自動XML持久性得到最佳保存,以利於編寫實際應用程序。