2016-08-21 105 views
1

我已经阅读了如何使用Jackson Streaming API以及杰克逊映射器进行对象Json转换,反之亦然,但对于我的弹簧项目,我应该使用哪一个。杰克逊流媒体API vs杰克逊映射器

它被写入Streaming API是最强大的,但我发现mappers真的很容易使用和易于理解。

我的问题是Streaming API如何比mappers更强大,以及哪个更适合在大型弹簧项目中使用?

+0

什么时候将一个文件的全部内容加载到内存中是一个好主意,以及何时逐行读取文件并逐行处理每一行更好?我会说它主要取决于文件的大小,并行处理的文件数量,可用内存以及两种可能解决方案的相对难度。你不是吗? JSON也一样。 –

+0

是的,这取决于数据的大小,但在两种情况下都必须写入磁盘,因此差异在哪里。另外,流式API如何比映射器强大。 –

+0

我真的不明白为什么JSON将不得不存储在磁盘上,但您似乎没有理解我以前的评论。如果您拥有500 MB的内存,则加载600 MB内存的JSON然后将这600 MB写入磁盘将不起作用。每1 MB加载1MB,并且在加载下一个MB之前将每个MB写入磁盘都可以正常工作。 –

回答

1

杰克逊映射器:

使用杰克逊映射器时,我们加载整个JSON文档到存储器作为Java对象。这可能是一个问题,如果有一个非常大的数据集。例如,如果在一个非常大的项目中使用映射器,则内存限制仅为512MB,但JSON的大小为600MB,在这种情况下,应用程序将崩溃。在这种情况下,使用Streaming API是首选。

杰克逊流API:

使用杰克逊流API的情况下,我们可以通过令牌即顾名思义流API加载JSON数据令牌对待JSON文档作为可以由被消耗一个JSON令牌的流一个没有内存问题。但是,如果内存要求不是很高,映射器是首选,因为它们快速高效。

问题的第二部分,

如何流API比映射器更强大?

那么,由于json文档被视为令牌流,我们可以按照我们的要求操纵令牌并使用它们。映射器仅提供获取和存储功能。 Streaming API是低层次的,给予开发者更多的权力。

低级别的API更难使用,有时令人困惑,而映射器功能易于使用。