TypeAdapter

從設計角度看,Adapter很容易聯想到適配器設計模式。不錯!TypeAdapter正是一個適配器,它提供了數據類型和Json格式轉換的通道。在Gson的設計中,TypeAdapter負責對各種數據類型進行轉換,比如:整型、Map類型、自定義類型等。TypeAdapter使用泛型設計,提供了兩個抽象方法write和read。

 

把對象輸出到JsonWriter中。JsonWriter提供了輸出各種類型屬性的方法,通過重載提供了write(..)/value(...)方法,具體和參考JsonWriter的介紹

public abstract void write(JsonWriter out, T value) throws IOException

方法名稱指明瞭需要做的業務,參數則提供了更通用的入參類型Writer。

該方法可以把對象輸出到Writer類型的輸出流中。內部實現上使用包裝類JsonWtiter完成輸出格式的轉換。

public final void toJson(Writer out, T value) throws IOException

方法不指定輸出參數,默認返回json格式的String類型結果。實際上使用的是StringWriter完成輸出流轉換的,具體操作是,創建StringWriter之後,調用前面的方法。從而完成json數據格式轉換

public final String toJson(T value)

和上一個方法類似,差別在於實現的時候,使用的是JsonTreeWriter完成數據格式轉換的。JsonTreeWriter的實現在後續的博客中會繼續介紹

public final JsonElement toJsonTree(T value)

解析json數據,從JsonReader中讀取json數據,並完成對象創建和屬性賦值,從而恢復出完成的數據對象

public abstract T read(JsonReader in) throws IOException

對read方法的擴展,接受更加通用的Reader格式輸入,內部實現使用JsonReader對Reader包裝,完成輸入流格式轉換,並調用前一個方法,達到從輸入流恢復出對象的目的

public final T fromJson(Reader in) throws IOException

從json字符串恢復對象屬性,使用StringReader對String類型的輸入數據進行包裝,並且調用前面的方法,達成對象賦值的目的

public final T fromJson(String json) throws IOException

從JsonElement中恢復對象信息,使用JsonTreeReader對JsonElement類型的輸入數據進行包裝,然後調用前面的方法恢復出數據對象。

public final T fromJsonTree(JsonElement jsonTree)

 

TypeAdapter是泛型設計,提供了基本的接口封裝,但是核心的reader和writer接口還需要子類實現。Gson內部提供了大量的子類(包括匿名子類,私有子類,公有子類等)。下圖是幾個public類型的子類

其中,TreeTypeAdapter和ArrayTypeAdapter依然是泛型設計

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章