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依然是泛型设计

 

 

 

 

 

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