GSON的内部工作

时间:2014-03-03 11:59:05

标签: java android json gson

我在当前的项目中与GSON合作,我很惊讶地看到它的力量,并且想知道它是如何在内部工作的。 GSON对象如何将任何对象更改为JSON,反之亦然。我确实阅读了谷歌用户指南,但没有提到他们的内部工作。谁能解释一下。此问题可能不会吸引一些人,但我是Android编程的新手,正在探索的东西。虽然我成功地使用了gson。但我想知道它的工作方法。任何人都可以解释。 非常感谢。

2 个答案:

答案 0 :(得分:2)

Gson的内部构建基于三种核心类型:

  • JsonReader从流中读取JSON文档中的元素。
  • JsonWriter将JSON文档中的元素写入流中。
  • TypeAdapter将单个JSON元素转换为单个对象,反之亦然。

一个关键模式是TypeAdapter以递归方式实现。例如,TypeAdapter<FoodDelivery>可以委托给TypeAdapter<Address>TypeAdapter<MenuItem>TypeAdapterFactory接口可以轻松地为任意类型构建类型适配器。

另一个关键模式是Gson包含默认内置的一些很棒的类型适配器。有基元,字符串,集合的类型适配器。还有一个特殊类型的适配器,它接受任意Java类并逐个字段地将它转换为JSON对象。

答案 1 :(得分:-1)

我建议您不要执行对象的重新创建,除非需要,否则不要强制GSON。 IMO,您必须在GSON服务的任何地方使用REST,但GSON比java集合(ArrayListHashMap或其他更慢。GSON。 ..)如果你继续在任何地方使用JSON,你将减少应用程序的性能。

第二个原因是,当您执行对象重新创建时,这是在手机内存中完成的,例如,我遇到了GSONOutOfMemoryException)对象的问题,该对象因服务而暴露是35-40MB,对象创建使用超过70MB的RAM。在那里,我有MemoryExhaustedException,{{1}}以及更多此类问题。

如果此限制对您不感兴趣(您没有大对象,或者不需要高速),则继续将对象转换为GSON。