2011-10-19 87 views
2

所以我在一個項目中使用專有的java庫,我無法訪問源代碼。Java:如何序列化第三方庫生成的Java對象?

它拋出一個Message對象,顯然我不能實現Serializable。它在整個運行時間生成。

我的選擇是什麼?有沒有辦法將Message對象序列化成一個字節數組並返回到對象中?

更新:我能夠將對象序列化爲JSON(http://code.google.com/p/json-io/),但由於返回null而無法將其轉換回對象。所以我想用下面的代碼將它轉換爲字節數組。還是行不通。

public byte[] toByteArray (Object obj) 
{ 
    byte[] bytes = null; 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    try { 
    ObjectOutputStream oos = new ObjectOutputStream(bos); 
    oos.writeObject(obj); 
    oos.flush(); 
    oos.close(); 
    bos.close(); 
    bytes = bos.toByteArray(); 
    } 
    catch (IOException ex) { 
    //TODO: Handle the exception 
    } 
    return bytes; 
} 

public Object toObject (byte[] bytes) 
{ 
    Object obj = null; 
    try { 
    ByteArrayInputStream bis = new ByteArrayInputStream (bytes); 
    ObjectInputStream ois = new ObjectInputStream (bis); 
    obj = ois.readObject(); 
    } 
    catch (IOException ex) { 
    //TODO: Handle the exception 
    } 
    catch (ClassNotFoundException ex) { 
    //TODO: Handle the exception 
    } 
    return obj; 
} 
+0

你知道對象是否已經實現了Serializable?如果你不知道,你可以試試看看它是否有效。 –

+1

它不能實現Serializable。 – KJW

+0

嘗試將其子類化。 –

回答

2

當然,你只是不能使用java.lang.Serializable機制。

選擇任何格式:XML,JSON,protocol buffer或其他可能適合您的東西。

現在你負責對話的兩端:序列化和反序列化。

+0

,而不是原型緩衝區。 –

+0

謝謝,我的速度太快了。 – duffymo

3

您可以編寫一個可序列化的包裝器,並存儲重新創建Message對象所需的所有內容。

1

如果對象是Java bean,則可以使用java.beans.XMLEncoderjava.beans.XMLDecoder進行序列化。