2011-05-28 32 views
1

我有一個java庫,我想將一個java對象的實例保存到一個文本文件中。我試圖使用所有java庫進行序列化和反序列化到xml:http://karussell.wordpress.com/2009/09/03/xml-serializers-for-java/但反序列化不起作用。我在這裏發佈了一個問題:http://stackoverflow.com/questions/6139702/deserializing-xml-file-from-xstream但似乎我無法獲得解決方案。將java對象序列化爲文本文件

我也試圖序列化到json但從json反序列化不起作用。

所以,我想知道apart of serializing to xml and json,有沒有其他方法可以從java對象(不能修改添加標籤:@XmlRootElement(name="customer"))到文本文件的序列化和反序列化?

在此先感謝!

+3

我個人認爲用xstream堅持會更好。它可以工作,你只需要堅持下去。在我的原創主題上看到我的評論。乾杯。基思......你需要*定義*你的問題。 「不起作用」就像去看醫生一樣,說「我不舒服」,並期待針對您的具體疾病的確切治療。 – corlettk 2011-05-28 10:02:12

+0

@corlettk:在那個筆記上,我隱約記得最近的一個Stack Exchange播客,Joel,Jeff和Jon Skeet正在討論算法,以檢測那些聲稱某些東西不起作用的問題,但沒有提供任何有用的數據。 :) – 2011-05-28 10:24:24

+2

你會發現反序列化對所有的serialziation庫都有效,一旦你弄清楚你做錯了什麼。只是改變圖書館不會解決問題。 – 2011-05-28 10:42:08

回答

5

最簡單的方法可能是使用本地Java序列化。它會生成對象的二進制表示,但你可以編碼與Base64編碼生成的字節數組將其轉換爲文本:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(baos); 
oos.writeObject(myObject); 
oos.flush(); 
byte[] binary = baos.toByteArray(); 
String text = Base64.encodeBase64String(binary); // Base64 is in the apache commons codec library 
// save text to a file 

注意的對象,每個對象它引用(遞歸)必須實現java.io.Serializable爲這工作。

+0

嗨,謝謝,但正如我所提到的對象是在一個Java庫中,我不能添加對象與java.io.serializable。 – olidev 2011-05-28 13:00:29

1

您可以使用Gson到Java對象轉換成JSON,反之亦然

下面是從GSON用戶指南example

或者可能是apache digester可以提供幫助。

+0

我已經試過Gson,但它接受循環引用! – olidev 2011-05-28 09:57:35

+0

你有沒有試過[沼氣池](http://commons.apache.org/digester/)? – Premraj 2011-05-28 10:05:04

+0

我沒有聽說過Gson。 Noice和簡單!謝謝你的魚;-) – corlettk 2011-05-28 11:01:59

相關問題