优化 Gson 反序列化

2022-09-04 00:46:21

优化反序列化的最佳方法是什么?

我目前正在使用标准的Gson.toJson和Gson.fromJson方法来对一些复杂的对象进行序列化和反序列化,如果可能的话,我希望减少反序列化时间。

我的对象中最复杂的包含43个变量,如果这很重要的话。


答案 1

如果你想使用Gson,而不是切换到另一个Java-to/from-JSON API,并且如果Gson的automagic数据绑定的性能不够好,那么有可能继续使用Gson API,并挤出一些适度更好的性能。

https://github.com/eishay/jvm-serializers/wiki 发布的最新几轮性能测试中,结果表明,通过使用Gson的流式API而不是数据绑定,Gson序列化和反序列化的组合性能可能会提高约25%。

请注意,这通常会使用户代码的实现显着复杂化,其中与使用数据绑定API的单行解决方案(例如,)相媲美,被替换为(容易)数十行,包括循环和条件。因此,提高性能的成本是更复杂的代码。new Gson().toJson(something)

有关使用流式处理 API 与数据绑定 API 的示例,请查看 jvm-serializers 项目中的 JsonGsonManual 和 JsonGsonDatabind 实现。

(注意:也可以在 Gson API 中使用树模型,而不是流式处理或数据绑定 API,但它似乎没有提供任何性能优于数据绑定的性能改进。有关示例,请参阅 JsonGsonTree


答案 2

没有办法改善Gson库的序列化和反序列化时间。

正如程序员布鲁斯所说,如果执行时间对你来说真的很重要,那就看看杰克逊图书馆吧。在我看来,它使用起来有点“复杂”,但它已被证明比基准测试中的任何其他json库都要快得多。

以下是一些提高 Jackson 性能的最佳做法。