GSON: fromJson(Reader json, 类型 typeOfT) vs fromJson(String json, 类型 typeOfT)
GSON: fromJson(Reader json, Type typeOfT) vs fromJson(String json, Type typeOfT)
我正在使用一个代码库,该代码库获取网络响应的主体并将其提供给具有 fromJson(Reader json, Type typeOfT)
的 GSON 实例以创建 POJO。
通常我会看到对 fromJson(String json, Type typeOfT)
的调用,但他们坚持认为使用 Reader
调用更好。
使用 String
与 Reader
之间有什么区别,它们会有多大的区别?
Reader
是用于读取字符流的 class。所以当解析器使用它时,它从Reader中一个一个地取出每个字符并逐渐解析输入。
使用字符串会强制您在解析之前将所有 json 存储到其中。如果您要解析的结构很大,这可能不是最佳方法。
此外,如果您从在 Reader 中读取的请求中获得响应,它允许您直接解析响应而不是读取所有流以将其构建到一个字符串中,然后提供该字符串进入解析器。
因此,如果字符串中直接包含 json,请使用 fromJson(String s, ...)
,否则使用 fromJson(Reader r, ...)
举一个实际的例子,假设您有一个巨大的 json 文件,您想要解析该文件,但该文件的第一行存在语法错误。将其所有内容读入一个 String 中,然后解析它,发现第一行有错误,这显然是低效的。
如果您改用 FileReader
,您只需阅读第一行就会发现这是格式错误的 json.
我正在使用一个代码库,该代码库获取网络响应的主体并将其提供给具有 fromJson(Reader json, Type typeOfT)
的 GSON 实例以创建 POJO。
通常我会看到对 fromJson(String json, Type typeOfT)
的调用,但他们坚持认为使用 Reader
调用更好。
使用 String
与 Reader
之间有什么区别,它们会有多大的区别?
Reader
是用于读取字符流的 class。所以当解析器使用它时,它从Reader中一个一个地取出每个字符并逐渐解析输入。
使用字符串会强制您在解析之前将所有 json 存储到其中。如果您要解析的结构很大,这可能不是最佳方法。
此外,如果您从在 Reader 中读取的请求中获得响应,它允许您直接解析响应而不是读取所有流以将其构建到一个字符串中,然后提供该字符串进入解析器。
因此,如果字符串中直接包含 json,请使用 fromJson(String s, ...)
,否则使用 fromJson(Reader r, ...)
举一个实际的例子,假设您有一个巨大的 json 文件,您想要解析该文件,但该文件的第一行存在语法错误。将其所有内容读入一个 String 中,然后解析它,发现第一行有错误,这显然是低效的。
如果您改用 FileReader
,您只需阅读第一行就会发现这是格式错误的 json.