2013-01-24 189 views
3

最近我一直在測試Kryo的序列化和反序列化,並且一般對它感到滿意,但是不清楚如何處理一個類的(反)序列化,它包含對象數組。該類包含最終字段,所以我似乎無法使用默認的FieldSerializer(錯誤爲「無法創建類(缺少無參數構造函數)」,但無參數構造函數不適合最終原語)。所以,給定類序列化和反序列化Kryo中的對象數組

@AllArgsConstructor 
public class DataObject{ 
    private final double field1; 
    private final double field2; 
    private SubObject[] children; 
} 

@AllArgsConstructor 
public class SubObject{ 
    private final double field1; 
    private final double field2; 
} 

如何有效地寫一個序列化/解串器來處理這個?我的假設是,我錯過了com.esotericsoftware.kryo.io.Input中的一些東西,它可以讓我在自定義串行器中執行此操作,但這可能是錯誤的軌道。

+2

只是使用kryo.writeObject()和kryo.readObject有什麼問題?也就是說,爲什麼你需要在Kyro之上編寫自己的序列號呢? –

+0

有同樣的問題( –

回答

0

3年前問過問題,所以這是有點傻寫答案,但我找到了一個解決方案,直接在kryo的自述文件

這裏描述的是一個link

基本上當你通過writeObject(Output, Object)簡單的調用序列化對象無需提供自己的序列化程序,kryo使用默認FieldSerializer,它需要非參數構造函數。

您可以使用reflection機制提供私人非參數構造函數kryo將調用。我認爲這是合適的方法,你想要什麼,因爲私人零參數構造不違反架構原則