优化Gson反序列化

Han*_*oit 12 java json gson

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

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

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

Pro*_*uce 16

如果你想使用Gson,而不是切换到另一个Java-to-from-JSON API,并且如果Gson的自动数据绑定的性能不够好,那么可以继续使用Gson API,并挤出一些性能稍好一点.

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

注意,这通常使用户代码的实现变得非常复杂,其中与使用数据绑定API的单行可比较的解决方案例如new Gson().toJson(something)被(容易地)数十行代替,包括循环和条件.因此,改进性能的代价是更复杂的代码.

有关使用流API与数据绑定API的示例,请查看jvm-serializers项目中的JsonGsonManualJsonGsonDatabind实现.

(注意:也可以使用Gson API中的树模型,而不是流式或数据绑定API,但它似乎没有提供任何相比数据绑定的性能改进.例如,请参阅JsonGsonTree.)


Pad*_*rus 5

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

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

以下是一些可以提高 Jackson 性能的最佳实践。

  • 同意(显然)。我要补充的是,虽然 Jackson 的配置选项比 Gson API 提供的配置选项广泛且重要得多,但对于需要最少自定义处理的数据结构之间映射的简单用例,Jackson 像 Gson 一样提供了一个简单的选项线解决方案。 (2认同)