Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GSON的内部工作_Java_Android_Json_Gson - Fatal编程技术网

Java GSON的内部工作

Java GSON的内部工作,java,android,json,gson,Java,Android,Json,Gson,在我当前的项目中,我正在与GSON合作,看到它的强大,我感到惊讶,并且想知道它是如何在内部工作的。GSON对象如何将any对象更改为JSON,反之亦然。我确实读过谷歌用户指南,但没有提到他们的内部工作。谁能解释一下。此外,这个问题可能对一些人没有吸引力,但我对安卓编程还不熟悉,正在探索一些东西。虽然我成功地使用了gson。但我确实想知道它的工作方法。谁能解释一下。 非常感谢。我建议您不要执行对象的重新创建,也不要强制执行GSON,除非需要。在我看来,你必须在你有REST服务的任何地方使用GSON

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

我建议您不要执行对象的重新创建,也不要强制执行GSON,除非需要。在我看来,你必须在你有REST服务的任何地方使用
GSON
,但是
GSON
比java集合要慢(
ArrayList
HashMap
或任何其他…),如果你继续在任何地方使用
GSON
,你会降低应用程序的性能

第二个原因是,当您执行对象重新创建时,这是在手机内存中完成的,举个例子,我遇到了一个通过服务公开的
JSON
GSON
)对象的问题,因为它是35-40MB,并且对象创建使用了超过70MB的RAM。在那里,我遇到了
OutOfMemoryException
内存xhoustedexception
以及更多此类问题


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

GSON的内部结构基于三种核心类型:

  • 从流中读取JSON文档中的元素
  • 将JSON文档中的元素写入流
  • 将单个JSON元素转换为单个对象,反之亦然
一个关键模式是TypeAdapter是递归实现的。例如,
TypeAdapter
可以委托给
TypeAdapter
TypeAdapter
TypeAdapterFactory
接口使为任意类型构建类型适配器变得容易


另一个关键模式是,
Gson
默认包含一些内置的很棒的类型适配器。有用于原语、字符串和集合的类型适配器。加上一个特殊类型的适配器,它接受一个任意Java类,并将其逐字段转换为JSON对象。

您可以随时获取源代码并亲自查看……好的,我的朋友谢谢您的帮助,我会看一看。对于像我这样想知道同样事情的人来说,这个链接很有帮助。希望有帮助。@SyedRazaMehdi链接现在不可用,404错误没问题,我很高兴能帮上忙。亲爱的朋友,你说在使用restful api时必须使用gson,这是强制性的吗?如果是为什么?我认为这不是一个合理的答案。Gson使用的内存不比手动转换多。它只做你手动做的事情,但自动为你节省时间和打字。